diff --git a/data/config.json b/data/config.json index 81a0f8f..d20f8ec 100644 --- a/data/config.json +++ b/data/config.json @@ -17,7 +17,7 @@ "keep_days": 30 }, "other": { - "master_password_hash": "$pbkdf2-sha256$29000$jjEmREjJWWsNYSyFMObcOw$7xzy6ahn4apmpLcAyxr2JKTxTmXd8zxtBgpB6uVGdDE", + "master_password_hash": "$pbkdf2-sha256$29000$fI.x9v7/fw/BuPc.R8i5dw$Y2uLJVNbFeBSdtUTLs4RP72rF8fwqPf2HXxdSjpL0JM", "anime_directory": "/home/lukas/Volume/serien/" }, "version": "1.0.0" diff --git a/data/download_queue.json b/data/download_queue.json index 5313acc..d153323 100644 --- a/data/download_queue.json +++ b/data/download_queue.json @@ -1,6 +1,1869 @@ { - "pending": [], + "pending": [ + { + "id": "94d72a05-9193-4ca1-9bb1-bcb1835684d4", + "serie_id": "highschool-dxd", + "serie_name": "Highschool DxD", + "episode": { + "season": 1, + "episode": 1, + "title": null + }, + "status": "pending", + "priority": "normal", + "added_at": "2025-10-30T20:24:03.056281Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "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", + "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:03.057388Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "96ed2c31-3b68-4925-b716-1924ea9dc961", + "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:03.057435Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "ae9336e0-28f6-4af0-b833-bcf8dc384e72", + "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:03.057481Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "f8ed23a9-aa21-4c6b-8b9b-f96b8a8fc881", + "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:03.057527Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "14e6c3c5-f3a1-4290-9c19-c1b555592fe4", + "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:03.057573Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "80b80733-7d6e-4938-85ad-213e0a445911", + "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:03.057620Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "a928abc3-1938-4a92-a0d4-e0a202badf67", + "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:03.057666Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "57352a9e-719e-48ef-87c9-aadec54c26ba", + "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:03.057712Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "247af43a-57b2-43fc-953c-f818687160be", + "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:03.057750Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "22e2cc74-e996-4cd8-9120-7f85de01f918", + "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:03.057780Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "b5977e4b-cb4d-483b-ace1-b34dc774b661", + "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:03.057814Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "40e80859-f28f-4af3-ae7d-4b9d896c3ac7", + "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:03.057843Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "acda1ba8-d38a-429b-a7f0-c1b7b216c110", + "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:03.057871Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "8325ac5c-8104-44ec-955f-1c167d539de1", + "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:03.057899Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "7641f3b3-a46a-493e-8822-9f11461dcacc", + "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:03.057928Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "b9764d95-89b5-42bc-8976-c66cd70f1cec", + "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:03.057956Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "5df00c57-8786-435d-8f88-70de3bc3dfde", + "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:03.057983Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "2c7c80f0-caa0-4392-8a7a-6d187d1d48cd", + "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:03.058011Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "a0f99126-881e-49cc-9fd8-2fd7573ee179", + "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:03.058046Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "de737485-b020-401e-822c-f1c3131bc784", + "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:03.058076Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "7873a0e2-410c-4d72-9f15-71701f8e4b8b", + "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:03.058105Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "83fb65d5-40b8-4078-987f-91955d395d99", + "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:03.058133Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "30a1cde6-22ef-4715-8d72-a5db61705957", + "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:03.058161Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "c6a9e478-556b-43ce-a26d-b0fb721ddeee", + "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:03.058189Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "e6b968ce-d0f4-44aa-83b4-9efe80272a18", + "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:03.058218Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "222b18ca-e813-478d-9ad3-48b003e2c1f6", + "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:03.058246Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "7f1c12bc-255c-4ea4-a6db-3da0f6f46296", + "serie_id": "highschool-dxd", + "serie_name": "Highschool DxD", + "episode": { + "season": 1, + "episode": 1, + "title": null + }, + "status": "pending", + "priority": "normal", + "added_at": "2025-10-30T20:24:13.798540Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "e90d62b6-b524-4f6a-8e74-2cbef19b90d2", + "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:13.798629Z", + "started_at": null, + "completed_at": null, + "progress": null, + "error": null, + "retry_count": 0, + "source_url": null + }, + { + "id": "8e34b1fb-b4e3-4837-a675-ddefc510025d", + "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:13.798668Z", + "started_at": null, + "completed_at": null, + "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 + } + ], "active": [], "failed": [], - "timestamp": "2025-10-30T20:21:10.438027+00:00" + "timestamp": "2025-10-30T20:24:13.800401+00:00" } \ No newline at end of file diff --git a/instructions.md b/instructions.md index 58062b2..c3c62a3 100644 --- a/instructions.md +++ b/instructions.md @@ -106,3 +106,260 @@ For each task completed: --- # Tasks + +## Task: Simplify Download Queue Feature + +**Status**: ⏳ Not Started + +**Objective**: Simplify the download queue management system to use manual start/stop controls with organized status lists. + +### Requirements + +The queue page (`http://127.0.0.1:8000/queue`) must implement only these features: + +1. Items added via `/api/queue/add` are listed in pending queue +2. Start button removes first item from pending list and begins download +3. Successfully completed items move to finished list +4. Failed downloads move to failed list +5. Stop button prevents taking new items from queue (current download continues) + +### Phase 1: Backend Service Modifications + +#### Task 1.1: Simplify DownloadService + +**File**: `src/server/services/download_service.py` + +**Objectives**: + +- Remove auto-processing queue system (pause/resume/reorder functionality) +- Remove priority-based queue management +- Add manual `start_next_download()` method to process first pending item +- Add `stop_downloads()` method to prevent new downloads +- Ensure completion handlers move items to appropriate lists (completed/failed) +- Maintain WebSocket broadcast for status updates +- Keep database persistence for queue state + +**Dependencies**: None + +**Estimated Time**: 4 hours + +--- + +#### Task 1.2: Simplify API Endpoints + +**File**: `src/server/api/download.py` + +**Objectives**: + +- Remove endpoints: `/pause`, `/resume`, `/reorder`, bulk delete +- Update `POST /api/queue/start` to start first pending item only +- Update `POST /api/queue/stop` to stop queue processing +- Keep endpoints: `/status`, `/add`, `/{item_id}` delete, `/completed` clear, `/failed` clear, `/retry` +- Proper error handling for edge cases (empty queue, already downloading) +- Maintain authentication requirements + +**Dependencies**: Task 1.1 + +**Estimated Time**: 2 hours + +--- + +### Phase 2: Frontend Modifications + +#### Task 2.1: Simplify Queue Template + +**File**: `src/server/web/templates/queue.html` + +**Objectives**: + +- Remove drag-drop handles and reordering UI +- Remove bulk selection checkboxes +- Remove pause/resume buttons +- Remove priority badges +- Simplify pending queue section with Start/Stop buttons +- Update active downloads section (single item max) +- Keep completed and failed sections with clear buttons +- Ensure proper section headers and counts + +**Dependencies**: Task 1.2 + +**Estimated Time**: 2 hours + +--- + +#### Task 2.2: Simplify Queue JavaScript + +**File**: `src/server/web/static/js/queue.js` + +**Objectives**: + +- Remove drag-drop initialization and handlers +- Remove bulk operation functions +- Remove pause/resume queue functions +- Implement `startDownload()` function calling `/api/queue/start` +- Implement `stopDownloads()` function calling `/api/queue/stop` +- Update render functions to remove drag-drop and bulk features +- Update WebSocket handlers for new events (`download_started`, `queue_stopped`) +- Simplify UI state management (show/hide start/stop buttons) + +**Dependencies**: Task 2.1 + +**Estimated Time**: 3 hours + +--- + +#### Task 2.3: Clean Up CSS + +**File**: `src/server/web/static/css/ux_features.css` + +**Objectives**: + +- Remove drag-handle styles +- Remove bulk selection checkbox styles +- Remove priority badge styles +- Keep basic queue item layout and button styles +- Keep status indicators and progress bars + +**Dependencies**: Task 2.2 + +**Estimated Time**: 1 hour + +--- + +### Phase 3: Testing + +#### Task 3.1: Update Unit Tests + +**File**: `tests/unit/test_download_service.py` + +**Objectives**: + +- Remove tests for pause/resume/reorder/priority +- Add `test_start_next_download()` - verify first item starts +- Add `test_start_next_download_empty_queue()` - verify None returned +- Add `test_start_next_download_already_active()` - verify error raised +- Add `test_stop_downloads()` - verify queue stops processing +- Add `test_download_completion_moves_to_list()` - verify completed list +- Add `test_download_failure_moves_to_list()` - verify failed list + +**Dependencies**: Task 1.1 + +**Estimated Time**: 2 hours + +--- + +#### Task 3.2: Update API Tests + +**File**: `tests/api/test_download_endpoints.py` + +**Objectives**: + +- Remove tests for removed endpoints (pause/resume/reorder/bulk) +- Add `test_start_download_success()` - verify 200 response with item_id +- Add `test_start_download_empty_queue()` - verify 400 error +- Add `test_start_download_already_active()` - verify 400 error +- Add `test_stop_downloads()` - verify 200 response + +**Dependencies**: Task 1.2 + +**Estimated Time**: 2 hours + +--- + +#### Task 3.3: Manual Testing + +**Objectives**: + +- Test add items via API appear in pending list +- Test start button starts first pending item +- Test completed items move to completed section +- Test failed items move to failed section +- Test stop button prevents new downloads +- Test remove button works for pending items +- Test clear completed/failed buttons +- Test WebSocket real-time updates +- Test UI state changes (start/stop button visibility) +- Verify no console errors in browser + +**Dependencies**: Tasks 2.1, 2.2, 2.3 + +**Estimated Time**: 2 hours + +--- + +### Phase 4: Documentation + +#### Task 4.1: Update features.md + +**File**: `features.md` + +**Objectives**: + +- Replace "Download Management" section with simplified feature list +- Remove mentions of: drag-drop, reordering, pause/resume, bulk operations, priority +- Add: manual start/stop, FIFO queue, organized status sections +- Update queue statistics description + +**Dependencies**: All implementation tasks + +**Estimated Time**: 30 minutes + +--- + +#### Task 4.2: Update infrastructure.md + +**File**: `infrastructure.md` + +**Objectives**: + +- Update "Download Management" API endpoints list +- Remove endpoints: `/pause`, `/resume`, `/reorder`, bulk delete +- Update "Queue Organization" section +- Remove mentions of auto-processing and priority system +- Add description of manual start/stop workflow + +**Dependencies**: All implementation tasks + +**Estimated Time**: 30 minutes + +--- + +### Success Criteria + +- [ ] All 5 requirements from feature list are met +- [ ] No auto-processing or background queue processing +- [ ] Only one download active at a time +- [ ] Manual start required to begin downloads +- [ ] Stop prevents new downloads but allows current to complete +- [ ] All unit tests passing (≥80% coverage) +- [ ] All API tests passing +- [ ] Manual testing checklist 100% complete +- [ ] No browser console errors +- [ ] WebSocket updates working in real-time +- [ ] Documentation updated (features.md, infrastructure.md) +- [ ] Code follows project coding standards +- [ ] No breaking changes to other features + +### Rollback Plan + +1. Backend: Revert `download_service.py` and `download.py` +2. Frontend: Revert `queue.html`, `queue.js`, `ux_features.css` +3. Tests: Git revert test file changes +4. No database migration needed (no schema changes) + +### Estimated Total Time + +- Backend: 6 hours +- Frontend: 6 hours +- Testing: 4 hours +- Documentation: 1 hour +- **Total**: ~17 hours (~2-3 working days) + +### Notes + +- This is a simplification that removes complexity while maintaining core functionality +- Improves user experience with explicit manual control +- Easier to understand, test, and maintain +- Good foundation for future enhancements if needed +- No database schema changes required +- WebSocket infrastructure remains unchanged