Skip to content

Commit 6128f43

Browse files
committed
Simplified queue filtering by status & error
1 parent f43d4e2 commit 6128f43

File tree

4 files changed

+31
-17
lines changed

4 files changed

+31
-17
lines changed

src/jobs/remove_failed_downloads.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ class RemoveFailedDownloads(RemovalJob):
66
blocklist = False
77

88
async def _find_affected_items(self):
9-
return self.queue_manager.filter_queue_by_status(self.queue, ["failed"])
9+
return self.queue_manager.filter_queue(self.queue, ["failed"])

src/jobs/remove_metadata_missing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ class RemoveMetadataMissing(RemovalJob):
77

88
async def _find_affected_items(self):
99
conditions = [("queued", "qBittorrent is downloading metadata")]
10-
return self.queue_manager.filter_queue_by_status_and_error_message(self.queue, conditions)
10+
return self.queue_manager.filter_queue(self.queue, conditions)

src/jobs/remove_stalled.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ class RemoveStalled(RemovalJob):
99

1010
async def _find_affected_items(self):
1111
conditions = [("warning", "The download is stalled with no connections")]
12-
return self.queue_manager.filter_queue_by_status_and_error_message(self.queue, conditions)
12+
return self.queue_manager.filter_queue(self.queue, conditions)

src/utils/queue_manager.py

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
from typing import Union
23
from src.utils.common import make_request, extract_json_from_response
34
from src.utils.log_setup import logger
45

@@ -199,21 +200,34 @@ def group_by_download_id(self, queue_items):
199200

200201
return grouped_dict
201202

202-
@staticmethod
203-
def filter_queue_by_status(queue, statuses: list[str]) -> list[dict]:
204-
"""Filter queue items that match any of the given statuses."""
205-
return [item for item in queue if item.get("status") in statuses]
206203

207204
@staticmethod
208-
def filter_queue_by_status_and_error_message(
209-
queue, conditions: list[tuple[str, str]]
205+
def filter_queue(
206+
queue: list[dict],
207+
conditions: list[Union[str, tuple[str, str]]],
210208
) -> list[dict]:
211-
"""Filter queue items that match any given (status, errorMessage) pair."""
212-
queue_items = []
209+
"""
210+
Filter queue items by status or (status, errorMessage) pairs.
211+
212+
- If an entry in `conditions` is a string, only status is checked.
213+
- If it's a (status, errorMessage) tuple, both must match.
214+
"""
215+
filtered_items = []
213216
for item in queue:
214-
if "errorMessage" in item and "status" in item:
215-
for status, message in conditions:
216-
if item["status"] == status and item["errorMessage"] == message:
217-
queue_items.append(item)
218-
break # Stop checking other conditions once one matches
219-
return queue_items
217+
item_status = item.get("status")
218+
item_error = item.get("errorMessage")
219+
220+
for condition in conditions:
221+
if isinstance(condition, str):
222+
if item_status == condition:
223+
filtered_items.append(item)
224+
break
225+
elif (
226+
isinstance(condition, tuple)
227+
and len(condition) == 2
228+
and item_status == condition[0]
229+
and item_error == condition[1]
230+
):
231+
filtered_items.append(item)
232+
break
233+
return filtered_items

0 commit comments

Comments
 (0)