Resume failed episode batch retries

This commit is contained in:
Dymas
2026-09-01 13:39:27 +02:00
parent 97646d1382
commit 5718e5fe91
6 changed files with 161 additions and 5 deletions
+48
View File
@@ -613,6 +613,30 @@ class QueueApiTests(unittest.TestCase):
self.assertEqual(retried["status"], "pending")
self.assertEqual(retried["result_index"], 4)
def test_covered_episodes_includes_completed_and_remaining_retry_parts(self):
created = self.queue.add(
{
"show_id": "show-42",
"query": "Retry Coverage",
"title": "Retry Coverage",
"anime_name": "Retry Coverage",
"mode": "sub",
"quality": "best",
"episodes": "1-3",
"download_dir": "/tmp/example",
"season": "1",
}
)
with self.queue.lock:
job = self.queue._find(created["id"])
job["completed_episodes"] = ["1"]
job["retry_episodes"] = "2-3"
self.queue._save_job_locked(job)
covered = self.queue.covered_episodes("show-42", "sub", ["1", "2", "3", "4"])
self.assertEqual(covered, {"1", "2", "3"})
def test_add_reuses_matching_failed_job_instead_of_creating_duplicate(self):
payload = {
"show_id": "show-42",
@@ -1099,6 +1123,16 @@ class DownloadQueueWorkerFailureTests(unittest.TestCase):
self.assertFalse(staged_episode.exists())
self.assertFalse(staging_dir.exists())
self.assertIn(f"Saved: {final_episode}", stored["log"])
self.assertEqual(stored["completed_episodes"], ["1"])
self.assertEqual(stored["retry_episodes"], "2")
retried = queue.retry(job["id"])
command = APP.app_support.command_for_job(retried)
self.assertEqual(retried["status"], "pending")
self.assertEqual(retried["episodes"], "1-2")
self.assertEqual(retried["retry_episodes"], "2")
self.assertEqual(command[command.index("--episodes") + 1], "2")
def test_successful_detached_download_logs_sync_skipped(self):
queue = APP.DownloadQueue(
@@ -2158,6 +2192,20 @@ class WatchlistCompletionTests(unittest.TestCase):
self.assertNotIn("-S", command)
def test_command_for_job_uses_retry_episode_spec_when_present(self):
command = APP.app_support.command_for_job(
{
"query": "Queue Show",
"quality": "best",
"episodes": "1-12",
"retry_episodes": "3-12",
"mode": "dub",
},
download_path="/tmp/kaizoku-staging",
)
self.assertEqual(command[command.index("--episodes") + 1], "3-12")
def test_download_watchlist_item_queues_full_episode_range_for_selected_mode(self):
item = {
"show_id": "show-42",