26 lines
1.1 KiB
Python
26 lines
1.1 KiB
Python
from typing import Any
|
|
|
|
|
|
def label_episode_downloads(torrents: list[dict], queue: Any) -> list[dict]:
|
|
"""Join by collector download ID, never by fuzzy title matching.
|
|
|
|
A pack shares one transfer percentage; do not pretend its episodes have
|
|
individually measured progress.
|
|
"""
|
|
records = queue.get("records", []) if isinstance(queue, dict) else queue
|
|
labels: dict[str, set[str]] = {}
|
|
for row in records if isinstance(records, list) else []:
|
|
episode = row.get("episode") or {}
|
|
season, number = episode.get("seasonNumber"), episode.get("episodeNumber")
|
|
if isinstance(season, int) and isinstance(number, int):
|
|
key = str(row.get("downloadId") or "").lower()
|
|
labels.setdefault(key, set()).add(f"S{season:02d}E{number:02d}")
|
|
for torrent in torrents:
|
|
episodes = sorted(labels.get(str(torrent.get("hash") or "").lower(), set()))
|
|
torrent["episodeLabels"] = episodes
|
|
torrent["episodeLabel"] = (
|
|
" · ".join(episodes) + (" — shared download progress" if len(episodes) > 1 else "")
|
|
if episodes else None
|
|
)
|
|
return torrents
|