diff --git a/data/config.json b/data/config.json index 89aaf24..077de6f 100644 --- a/data/config.json +++ b/data/config.json @@ -17,7 +17,7 @@ "keep_days": 30 }, "other": { - "master_password_hash": "$pbkdf2-sha256$29000$rvXeu1dKqdXau/f.P0cIAQ$mApPqnzZmUlUFDkuzsxMuVV4V4pMba9IwEJO1XsV1MU", + "master_password_hash": "$pbkdf2-sha256$29000$MkbonbMWolTKOUfIOcc4Jw$8Aza9RknTXDSwQ1/mc.EwerqRrZ4Yo6tQlust.Nm/kQ", "anime_directory": "/home/lukas/Volume/serien/" }, "version": "1.0.0" diff --git a/data/download_queue.json b/data/download_queue.json index 137d327..b2d0400 100644 --- a/data/download_queue.json +++ b/data/download_queue.json @@ -1,425 +1,7 @@ { "pending": [ { - "id": "66cabe1f-48f1-4652-bb8c-9163b763dbc4", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 2, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.056379Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "36a225c3-3823-4159-80f9-c4302932a917", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 3, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.056430Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "14952c68-d90f-40ae-9ce0-be74d2b2944e", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 4, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.056465Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "987aa72f-d132-4208-a35f-ee8393417ad5", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 5, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.056497Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "9b7ec098-b8e3-4fb2-a73c-ada594b8e4d1", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 6, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.056532Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "5c026f6c-13e1-4a60-adf9-57c40167dd24", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 7, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.056579Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "da955b53-8312-4093-a3cc-f7b3a3c6d4c6", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 8, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.056624Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "98586083-a64b-4952-88c5-79bea06a714d", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 9, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.056672Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "e3ef176e-dfd2-45a2-a330-c58fe6f38c3f", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 10, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.056719Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "01041dc9-fe1d-421d-85be-0c71ee6cf6f1", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 11, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.056766Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "105c78ca-b958-463f-9b06-632a85259997", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 12, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.056812Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "82677a9d-274d-480e-9d2b-59454514b7dc", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.056859Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "de41b416-ba7f-4870-b25c-4035d3aa3f95", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 2, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.056904Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "b65aacb7-06a5-4859-b01b-798d1dcf44c9", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 3, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.056952Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "6abe82dd-3991-4d78-bfb5-e0c941143a5f", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 4, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.056998Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "e2a180e7-317e-40cb-9c7c-756f4a948a90", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 5, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.057052Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "e835ec47-e972-4156-add0-1f12cc98daf7", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 6, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.057100Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "b7f4848a-4bd9-4644-961e-33616261101e", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 7, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.057148Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "9167be02-38be-4be4-bed3-a79a054317fc", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 8, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.057196Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "e2b9fa0a-0cb8-44e3-9307-8f3f6e5b2ea9", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 9, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.057245Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "3625def8-a464-4c0a-9d81-0c5087a157ef", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 10, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.057293Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "7e0d9fc2-6474-442b-a1c0-79b00e0259a4", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 11, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:03.057341Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "5e59745a-c726-4740-8a01-b566813e1fd5", + "id": "e8ddd58a-955c-4af0-ab44-18cda4d0797d", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -429,7 +11,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057388Z", + "added_at": "2025-11-01T14:30:56.881780Z", "started_at": null, "completed_at": null, "progress": null, @@ -438,7 +20,7 @@ "source_url": null }, { - "id": "96ed2c31-3b68-4925-b716-1924ea9dc961", + "id": "b10dd8ba-549c-4028-86bd-2e59cce7ac4f", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -448,7 +30,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057435Z", + "added_at": "2025-11-01T14:30:56.881808Z", "started_at": null, "completed_at": null, "progress": null, @@ -457,7 +39,7 @@ "source_url": null }, { - "id": "ae9336e0-28f6-4af0-b833-bcf8dc384e72", + "id": "dd858d7c-d45d-41fb-8535-0b0bd19c720f", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -467,7 +49,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057481Z", + "added_at": "2025-11-01T14:30:56.881837Z", "started_at": null, "completed_at": null, "progress": null, @@ -476,7 +58,7 @@ "source_url": null }, { - "id": "f8ed23a9-aa21-4c6b-8b9b-f96b8a8fc881", + "id": "0129ee86-5aa2-4229-8aa3-834856ddd2fc", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -486,7 +68,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057527Z", + "added_at": "2025-11-01T14:30:56.881883Z", "started_at": null, "completed_at": null, "progress": null, @@ -495,7 +77,7 @@ "source_url": null }, { - "id": "14e6c3c5-f3a1-4290-9c19-c1b555592fe4", + "id": "55e21a17-ac91-4dfe-ba96-df5c4261a9a5", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -505,7 +87,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057573Z", + "added_at": "2025-11-01T14:30:56.881920Z", "started_at": null, "completed_at": null, "progress": null, @@ -514,7 +96,7 @@ "source_url": null }, { - "id": "80b80733-7d6e-4938-85ad-213e0a445911", + "id": "467b39ac-48be-48c5-a04c-ce94b6f6c0d9", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -524,7 +106,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057620Z", + "added_at": "2025-11-01T14:30:56.881950Z", "started_at": null, "completed_at": null, "progress": null, @@ -533,7 +115,7 @@ "source_url": null }, { - "id": "a928abc3-1938-4a92-a0d4-e0a202badf67", + "id": "4c0b9bd0-52ad-4833-baf7-19e2c920f94f", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -543,7 +125,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057666Z", + "added_at": "2025-11-01T14:30:56.881979Z", "started_at": null, "completed_at": null, "progress": null, @@ -552,7 +134,7 @@ "source_url": null }, { - "id": "57352a9e-719e-48ef-87c9-aadec54c26ba", + "id": "fabf8a46-6588-4dff-959d-de5e2bf48e29", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -562,7 +144,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057712Z", + "added_at": "2025-11-01T14:30:56.882013Z", "started_at": null, "completed_at": null, "progress": null, @@ -571,7 +153,7 @@ "source_url": null }, { - "id": "247af43a-57b2-43fc-953c-f818687160be", + "id": "7a6a40ce-c5d9-4e7e-8f71-a08141e9ce6f", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -581,7 +163,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057750Z", + "added_at": "2025-11-01T14:30:56.882050Z", "started_at": null, "completed_at": null, "progress": null, @@ -590,7 +172,7 @@ "source_url": null }, { - "id": "22e2cc74-e996-4cd8-9120-7f85de01f918", + "id": "e02d144f-9939-41fe-bd02-0d52d581df4a", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -600,7 +182,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057780Z", + "added_at": "2025-11-01T14:30:56.882082Z", "started_at": null, "completed_at": null, "progress": null, @@ -609,7 +191,7 @@ "source_url": null }, { - "id": "b5977e4b-cb4d-483b-ace1-b34dc774b661", + "id": "6d5577e4-cab3-4be9-8eda-691a9af27517", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -619,7 +201,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057814Z", + "added_at": "2025-11-01T14:30:56.882111Z", "started_at": null, "completed_at": null, "progress": null, @@ -628,7 +210,7 @@ "source_url": null }, { - "id": "40e80859-f28f-4af3-ae7d-4b9d896c3ac7", + "id": "d63fbe5a-7a04-4a40-9ddc-423396d30140", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -638,7 +220,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057843Z", + "added_at": "2025-11-01T14:30:56.882139Z", "started_at": null, "completed_at": null, "progress": null, @@ -647,7 +229,7 @@ "source_url": null }, { - "id": "acda1ba8-d38a-429b-a7f0-c1b7b216c110", + "id": "16bd4821-59f8-4071-a094-552db51af475", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -657,7 +239,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057871Z", + "added_at": "2025-11-01T14:30:56.882168Z", "started_at": null, "completed_at": null, "progress": null, @@ -666,7 +248,7 @@ "source_url": null }, { - "id": "8325ac5c-8104-44ec-955f-1c167d539de1", + "id": "0c4997aa-7d08-4290-83f1-85eceb5366c3", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -676,7 +258,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057899Z", + "added_at": "2025-11-01T14:30:56.882195Z", "started_at": null, "completed_at": null, "progress": null, @@ -685,7 +267,7 @@ "source_url": null }, { - "id": "7641f3b3-a46a-493e-8822-9f11461dcacc", + "id": "f8c2dda3-51e4-4748-b282-e72258f2be14", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -695,7 +277,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057928Z", + "added_at": "2025-11-01T14:30:56.882222Z", "started_at": null, "completed_at": null, "progress": null, @@ -704,7 +286,7 @@ "source_url": null }, { - "id": "b9764d95-89b5-42bc-8976-c66cd70f1cec", + "id": "c123676c-6539-4d79-b785-0b670f78fae3", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -714,7 +296,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057956Z", + "added_at": "2025-11-01T14:30:56.882250Z", "started_at": null, "completed_at": null, "progress": null, @@ -723,7 +305,7 @@ "source_url": null }, { - "id": "5df00c57-8786-435d-8f88-70de3bc3dfde", + "id": "3299eb0c-b275-444d-a951-86004cfe4f84", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -733,7 +315,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.057983Z", + "added_at": "2025-11-01T14:30:56.882277Z", "started_at": null, "completed_at": null, "progress": null, @@ -742,7 +324,7 @@ "source_url": null }, { - "id": "2c7c80f0-caa0-4392-8a7a-6d187d1d48cd", + "id": "22f9ccd9-46ff-4964-ad84-a4f525a2d1f4", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -752,7 +334,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.058011Z", + "added_at": "2025-11-01T14:30:56.882304Z", "started_at": null, "completed_at": null, "progress": null, @@ -761,7 +343,7 @@ "source_url": null }, { - "id": "a0f99126-881e-49cc-9fd8-2fd7573ee179", + "id": "03cbbe56-1a9d-4736-bc5d-7a698771ab2a", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -771,7 +353,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.058046Z", + "added_at": "2025-11-01T14:30:56.882331Z", "started_at": null, "completed_at": null, "progress": null, @@ -780,7 +362,7 @@ "source_url": null }, { - "id": "de737485-b020-401e-822c-f1c3131bc784", + "id": "54533241-ed24-482f-85d7-c9218352ae7f", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -790,7 +372,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.058076Z", + "added_at": "2025-11-01T14:30:56.882358Z", "started_at": null, "completed_at": null, "progress": null, @@ -799,7 +381,7 @@ "source_url": null }, { - "id": "7873a0e2-410c-4d72-9f15-71701f8e4b8b", + "id": "7e80b3c4-6837-4af7-bea3-ca037df594ce", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -809,7 +391,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.058105Z", + "added_at": "2025-11-01T14:30:56.882385Z", "started_at": null, "completed_at": null, "progress": null, @@ -818,7 +400,7 @@ "source_url": null }, { - "id": "83fb65d5-40b8-4078-987f-91955d395d99", + "id": "b668aa3f-bfc5-4355-b851-007017a56c2e", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -828,7 +410,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.058133Z", + "added_at": "2025-11-01T14:30:56.882411Z", "started_at": null, "completed_at": null, "progress": null, @@ -837,7 +419,7 @@ "source_url": null }, { - "id": "30a1cde6-22ef-4715-8d72-a5db61705957", + "id": "616fc8e5-4987-459e-977c-425649f48215", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -847,7 +429,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.058161Z", + "added_at": "2025-11-01T14:30:56.882437Z", "started_at": null, "completed_at": null, "progress": null, @@ -856,7 +438,7 @@ "source_url": null }, { - "id": "c6a9e478-556b-43ce-a26d-b0fb721ddeee", + "id": "d911c56f-e347-432a-83af-cf3cdc1f8d84", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -866,7 +448,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.058189Z", + "added_at": "2025-11-01T14:30:56.882465Z", "started_at": null, "completed_at": null, "progress": null, @@ -875,7 +457,7 @@ "source_url": null }, { - "id": "e6b968ce-d0f4-44aa-83b4-9efe80272a18", + "id": "a5ed1e19-051c-45ca-9ba3-d36de872aa41", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -885,7 +467,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.058218Z", + "added_at": "2025-11-01T14:30:56.882492Z", "started_at": null, "completed_at": null, "progress": null, @@ -894,7 +476,7 @@ "source_url": null }, { - "id": "222b18ca-e813-478d-9ad3-48b003e2c1f6", + "id": "d4ef1c1a-30b0-4f99-85fb-59b947a969f5", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -904,7 +486,7 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:03.058246Z", + "added_at": "2025-11-01T14:30:56.882519Z", "started_at": null, "completed_at": null, "progress": null, @@ -913,7 +495,7 @@ "source_url": null }, { - "id": "7f1c12bc-255c-4ea4-a6db-3da0f6f46296", + "id": "07230ffe-1b77-41b4-85f6-1e110b8ca76a", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -923,16 +505,16 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:13.798540Z", - "started_at": null, - "completed_at": null, + "added_at": "2025-11-01T14:06:39.995302Z", + "started_at": "2025-11-01T14:10:18.914729Z", + "completed_at": "2025-11-01T14:10:25.702201Z", "progress": null, - "error": null, + "error": "Download failed", "retry_count": 0, "source_url": null }, { - "id": "e90d62b6-b524-4f6a-8e74-2cbef19b90d2", + "id": "4fd07de6-c4b3-4917-9d63-adfd6e8a4e8c", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -942,16 +524,16 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:13.798629Z", - "started_at": null, - "completed_at": null, + "added_at": "2025-11-01T14:06:39.995380Z", + "started_at": "2025-11-01T14:10:49.550025Z", + "completed_at": "2025-11-01T14:10:55.477171Z", "progress": null, - "error": null, + "error": "Download failed", "retry_count": 0, "source_url": null }, { - "id": "8e34b1fb-b4e3-4837-a675-ddefc510025d", + "id": "2df7af08-2ea1-4d10-8e88-b61b3241b2f0", "serie_id": "highschool-dxd", "serie_name": "Highschool DxD", "episode": { @@ -961,909 +543,55 @@ }, "status": "pending", "priority": "normal", - "added_at": "2025-10-30T20:24:13.798668Z", - "started_at": null, - "completed_at": null, + "added_at": "2025-11-01T14:06:39.995420Z", + "started_at": "2025-11-01T14:11:50.395385Z", + "completed_at": "2025-11-01T14:11:57.999387Z", "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "d4a60c82-9495-4b30-9568-7fd659412e2d", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 4, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.798701Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "af79cd36-5341-4a29-a200-ea181cb636a6", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 5, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.798731Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "01a5e194-568b-4e79-bd1c-2f66420d5f51", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 6, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.798763Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "b363ab60-e682-4831-a178-0fb9aa368790", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 7, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.798794Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "91535dd0-dfcc-4e75-a8ec-6a74518c5ef8", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 8, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.798823Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "cc602bc4-ed06-4351-b360-93629ac95700", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 9, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.798851Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "8adb842b-94c6-4a02-8807-bc1127910ab3", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 10, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.798880Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "b0a9afb3-b867-4728-a0b3-81c47b1803e3", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 11, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.798909Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "ed134e7b-52c9-4f8a-8146-a9124b7f7dd9", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 1, - "episode": 12, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.798937Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "91aad8e2-f414-4555-bf3c-3c4f7b90306c", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.798965Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "50843d8f-2d18-469a-85d7-e041ef724de7", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 2, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.798993Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "a9362679-9ca7-46a7-8717-72e0ac878d08", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 3, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799020Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "55bb2498-dad5-4ce2-b3ec-6fa9b9094357", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 4, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799060Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "68a1ae92-cb60-4eed-aa0c-ddc9b2a6ddab", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 5, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799089Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "138a3d54-bfd0-435b-a926-449efaff0403", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 6, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799116Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "d62d31db-80d5-4a25-be6a-594f15cdbebf", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 7, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799143Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "27db56c9-2fad-4bd9-b3df-8c159d674e7e", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 8, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799170Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "d8178191-91ed-43cb-aee1-2f8640810a53", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 9, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799197Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "f21088b0-6f42-4318-aca8-43055a009c38", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 10, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799225Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "6298b47d-837a-4b28-b7c0-4920fdda39f8", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 11, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799252Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "f2622feb-f07b-4008-a656-d9bc5585b856", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 2, - "episode": 12, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799280Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "cf919f8c-1f57-4321-abff-637cdae38ca3", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 3, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799307Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "d8ea7621-3447-492c-b6d7-344ea248ebfe", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 3, - "episode": 2, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799336Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "6b2a4921-5d22-48e4-8189-29ce7e647764", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 3, - "episode": 3, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799365Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "93eb6cb5-55c5-4fe8-b813-0e8f55c9cb7b", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 3, - "episode": 4, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799392Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "c424731f-827b-41e2-accc-75b156423d5d", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 3, - "episode": 5, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799421Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "4c001f9b-055e-4c48-9f96-209832d62098", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 3, - "episode": 6, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799448Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "3cf04ad1-5aaa-4354-a1c9-1e6c28a3f466", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 3, - "episode": 7, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799476Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "d5c5d22d-9196-437b-837f-2b867fe43787", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 3, - "episode": 8, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799503Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "ecae8e7c-0529-4798-ad70-9d0589c29c5c", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 3, - "episode": 9, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799531Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "d82ada4a-de94-4cfb-a85c-f0e35c6ef167", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 3, - "episode": 10, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799558Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "80109ddc-1df8-48af-b84a-068807a48487", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 3, - "episode": 11, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799585Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "6aa25d79-256f-4c6a-a6c3-6b1f11e865f4", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 3, - "episode": 12, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799613Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "94656694-4dcb-4001-9f3e-cfb05fb65358", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 4, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799642Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "ace64692-649f-458d-96a6-a35149c9e750", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 4, - "episode": 2, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799673Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "026d0544-0bcb-4a28-9dad-6ba2eafd74a0", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 4, - "episode": 3, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799701Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "decd256e-07d5-4d53-8fb1-02bd6fa3f389", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 4, - "episode": 4, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799728Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "b6e7f0c0-5b5d-49ce-bb01-b78abf1a43bf", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 4, - "episode": 5, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799755Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "86e7a747-67b3-4412-a6f1-40dbf3bbab64", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 4, - "episode": 6, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799781Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "3ea24f2c-5e14-480d-a9a4-00bfc3a10118", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 4, - "episode": 7, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799808Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "e034b547-20be-44a0-8263-45e504ef72bf", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 4, - "episode": 8, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799834Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "55173899-62ce-40db-b453-1cf272b3790e", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 4, - "episode": 9, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799860Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "e3faba40-5a81-4770-b018-1f2bdda80075", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 4, - "episode": 10, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799887Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "6b4d22fd-0f88-4a2e-9695-b0a81c48bf9b", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 4, - "episode": 11, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799914Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "bdf6c106-1f31-4a6f-a277-ad00da9c6e69", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 4, - "episode": 12, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799940Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "59e22ec6-52e9-46af-9df6-aea8103b1f3e", - "serie_id": "highschool-dxd", - "serie_name": "Highschool DxD", - "episode": { - "season": 4, - "episode": 13, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T20:24:13.799968Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "ed2c1562-2f76-4a34-bc5b-ac1af5d22a83", - "serie_id": "test_anime", - "serie_name": "Test Anime", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-30T21:01:57.135210Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, + "error": "Download failed", "retry_count": 0, "source_url": null } ], "active": [], - "failed": [], - "timestamp": "2025-10-30T21:01:57.204142+00:00" + "failed": [ + { + "id": "692899f4-baaf-48b1-8849-4cd214080976", + "serie_id": "highschool-dxd", + "serie_name": "Highschool DxD", + "episode": { + "season": 1, + "episode": 1, + "title": null + }, + "status": "failed", + "priority": "normal", + "added_at": "2025-11-01T14:27:50.292481Z", + "started_at": "2025-11-01T14:40:26.830855Z", + "completed_at": "2025-11-01T14:40:37.287169Z", + "progress": null, + "error": "Download failed", + "retry_count": 0, + "source_url": null + }, + { + "id": "255fd20e-456e-45ff-b141-9a4b86daa789", + "serie_id": "highschool-dxd", + "serie_name": "Highschool DxD", + "episode": { + "season": 1, + "episode": 2, + "title": null + }, + "status": "failed", + "priority": "normal", + "added_at": "2025-11-01T14:27:50.292569Z", + "started_at": "2025-11-01T14:41:09.633937Z", + "completed_at": "2025-11-01T14:41:22.204881Z", + "progress": null, + "error": "Download failed", + "retry_count": 0, + "source_url": null + } + ], + "timestamp": "2025-11-01T14:42:24.118082+00:00" } \ No newline at end of file diff --git a/instructions.md b/instructions.md index 1b598e4..5de42dd 100644 --- a/instructions.md +++ b/instructions.md @@ -105,34 +105,20 @@ For each task completed: --- -# Tasks -## 📋 All Tasks Complete! ✅ +### Prerequisites -All phases of the download queue simplification have been successfully implemented: +1. Server is running: `conda run -n AniWorld python -m uvicorn src.server.fastapi_app:app --host 127.0.0.1 --port 8000 --reload` +2. Password: `Hallo123!` +3. Login via browser at `http://127.0.0.1:8000/login` -- ✅ **Phase 1**: Backend simplification (DownloadService + API endpoints) -- ✅ **Phase 2**: Frontend simplification (queue.html + queue.js + CSS cleanup) -- ✅ **Phase 3**: Testing (Unit tests + API tests) -- ✅ **Phase 4**: Documentation (features.md + infrastructure.md) +**Deployment Steps:** ---- - -### Success Criteria - -- [x] All 5 requirements from feature list are met -- [x] No auto-processing or background queue processing -- [x] Only one download active at a time -- [x] Manual start required to begin downloads -- [x] Stop prevents new downloads but allows current to complete -- [x] All unit tests passing (≥80% coverage) -- [x] All API tests passing -- [ ] Manual testing checklist 100% complete -- [ ] No browser console errors -- [ ] WebSocket updates working in real-time -- [x] Documentation updated (features.md, infrastructure.md) -- [x] Code follows project coding standards -- [ ] No breaking changes to other features +1. Commit all changes to git repository +2. Create deployment tag (e.g., `v1.0.0-queue-simplified`) +3. Deploy to production environment +4. Monitor logs for any unexpected behavior +5. Verify production queue functionality ### Notes @@ -142,3 +128,5 @@ All phases of the download queue simplification have been successfully implement - Good foundation for future enhancements if needed - No database schema changes required - WebSocket infrastructure remains unchanged + +# Tasks \ No newline at end of file diff --git a/src/server/api/download.py b/src/server/api/download.py index b095e4a..ac973bb 100644 --- a/src/server/api/download.py +++ b/src/server/api/download.py @@ -43,39 +43,27 @@ async def get_queue_status( queue_status = await download_service.get_queue_status() queue_stats = await download_service.get_queue_stats() - # Preserve the legacy response contract expected by the original CLI - # client and existing integration tests. Those consumers still parse - # the bare dictionaries that the pre-FastAPI implementation emitted, - # so we keep the canonical field names (``active``/``pending``/ - # ``completed``/``failed``) and dump each Pydantic object to plain - # JSON-compatible dicts instead of returning the richer - # ``QueueStatusResponse`` shape directly. This guarantees both the - # CLI and older dashboard widgets do not need schema migrations while - # the new web UI can continue to evolve independently. - status_payload = { - "is_running": queue_status.is_running, - "is_paused": queue_status.is_paused, - "active": [ - it.model_dump(mode="json") - for it in queue_status.active_downloads - ], - "pending": [ - it.model_dump(mode="json") - for it in queue_status.pending_queue - ], - "completed": [ - it.model_dump(mode="json") - for it in queue_status.completed_downloads - ], - "failed": [ - it.model_dump(mode="json") - for it in queue_status.failed_downloads - ], - } + # Build response with field names expected by frontend + # Frontend expects top-level arrays (active_downloads, pending_queue, etc.) + # not nested under a 'status' object + active_downloads = [ + it.model_dump(mode="json") + for it in queue_status.active_downloads + ] + pending_queue = [ + it.model_dump(mode="json") + for it in queue_status.pending_queue + ] + completed_downloads = [ + it.model_dump(mode="json") + for it in queue_status.completed_downloads + ] + failed_downloads = [ + it.model_dump(mode="json") + for it in queue_status.failed_downloads + ] - # Add the derived ``success_rate`` metric so dashboards built against - # the previous API continue to function without recalculating it - # client-side. + # Calculate success rate completed = queue_stats.completed_count failed = queue_stats.failed_count success_rate = None @@ -87,7 +75,12 @@ async def get_queue_status( return JSONResponse( content={ - "status": status_payload, + "is_running": queue_status.is_running, + "is_paused": queue_status.is_paused, + "active_downloads": active_downloads, + "pending_queue": pending_queue, + "completed_downloads": completed_downloads, + "failed_downloads": failed_downloads, "statistics": stats_payload, } ) diff --git a/tests/api/test_download_endpoints.py b/tests/api/test_download_endpoints.py index 563006b..1e62998 100644 --- a/tests/api/test_download_endpoints.py +++ b/tests/api/test_download_endpoints.py @@ -111,10 +111,16 @@ async def test_get_queue_status(authenticated_client, mock_download_service): assert response.status_code == 200 data = response.json() - assert "status" in data + # Updated to match new response structure + assert "is_running" in data + assert "is_paused" in data + assert "active_downloads" in data + assert "pending_queue" in data + assert "completed_downloads" in data + assert "failed_downloads" in data assert "statistics" in data - assert data["status"]["is_running"] is True - assert data["status"]["is_paused"] is False + assert data["is_running"] is True + assert data["is_paused"] is False mock_download_service.get_queue_status.assert_called_once() mock_download_service.get_queue_stats.assert_called_once() diff --git a/tests/integration/test_download_flow.py b/tests/integration/test_download_flow.py index fb44d94..fae8395 100644 --- a/tests/integration/test_download_flow.py +++ b/tests/integration/test_download_flow.py @@ -153,15 +153,14 @@ class TestDownloadFlowEndToEnd: if response.status_code == 200: data = response.json() - # Verify status structure - assert "status" in data + # Verify status structure (updated for new response format) + assert "is_running" in data + assert "is_paused" in data + assert "pending_queue" in data + assert "active_downloads" in data + assert "completed_downloads" in data + assert "failed_downloads" in data assert "statistics" in data - - status = data["status"] - assert "pending" in status - assert "active" in status - assert "completed" in status - assert "failed" in status async def test_add_with_different_priorities(self, authenticated_client): """Test adding episodes with different priority levels.""" @@ -292,11 +291,11 @@ class TestDownloadProgressTracking: if response.status_code == 200: data = response.json() - assert "status" in data + # Updated for new response format + assert "active_downloads" in data # Check that items can have progress - status = data["status"] - for item in status.get("active", []): + for item in data.get("active_downloads", []): if "progress" in item and item["progress"]: assert "percentage" in item["progress"] assert "current_mb" in item["progress"] @@ -358,13 +357,18 @@ class TestErrorHandlingAndRetries: if add_response.status_code == 201: # Get queue status to check retry count - status_response = await authenticated_client.get("/api/queue/status") - + status_response = await authenticated_client.get( + "/api/queue/status" + ) + if status_response.status_code == 200: data = status_response.json() # Verify structure includes retry_count field - for item_list in [data["status"].get("pending", []), - data["status"].get("failed", [])]: + # Updated to match new response structure + for item_list in [ + data.get("pending_queue", []), + data.get("failed_downloads", []) + ]: for item in item_list: assert "retry_count" in item