diff --git a/app.py b/app.py index 8bfb70e..f58909a 100644 --- a/app.py +++ b/app.py @@ -1006,7 +1006,7 @@ def sonarr_groups(): "category":category_key, "category_label":category_label}) return sorted(groups, key=lambda x: x["title"].lower()) -def start_scan(source, force=False, rows_snapshot=None, series_snapshot=None): +def start_scan(source, force=False, rows_snapshot=None, series_snapshot=None, pending_only=False): with job_lock: if jobs[source]["state"] == "running" or (jobs[source]["state"] in ("done", "error") and not force): return jobs[source] = {"state":"running", "total":0, "done":0, "error":None} @@ -1021,10 +1021,10 @@ def start_scan(source, force=False, rows_snapshot=None, series_snapshot=None): paths.extend(r["local_path"] for r in group["episodes"] if r["local_path"] != "—" and r["pending"] and not r.get("downloading")) else: for row in rows_snapshot if rows_snapshot is not None else radarr_rows(): - if row["local_path"] != "—" and is_german_review_candidate(row) and not row.get("downloading") and not has_german_track(row): paths.append(row["local_path"]) + if row["local_path"] != "—" and is_german_review_candidate(row) and not row.get("downloading") and not has_german_track(row) and (not pending_only or row.get("pending")): paths.append(row["local_path"]) if SONARR_URL and SONARR_API_KEY: for group in series_snapshot if series_snapshot is not None else sonarr_groups(): - paths.extend(r["local_path"] for r in group["episodes"] if r["local_path"] != "—" and is_german_review_candidate(r) and not r.get("downloading") and not has_german_track(r)) + paths.extend(r["local_path"] for r in group["episodes"] if r["local_path"] != "—" and is_german_review_candidate(r) and not r.get("downloading") and not has_german_track(r) and (not pending_only or r.get("pending"))) with job_lock: jobs[source]["total"] = len(paths) futures = [scan_executor.submit(scan_one, path) for path in paths] for future in as_completed(futures): @@ -1067,14 +1067,14 @@ def refresh_library_cache(): if series and any(row.get("pending") for group in series for row in group["episodes"]): start_scan("sonarr", force=True, series_snapshot=series) needs_missing_scan = any( - row.get("local_path") != "—" and is_german_review_candidate(row) and not has_german_track(row) + row.get("local_path") != "—" and is_german_review_candidate(row) and row.get("pending") and not has_german_track(row) for row in rows ) or any( - episode.get("local_path") != "—" and is_german_review_candidate(episode) and not has_german_track(episode) + episode.get("local_path") != "—" and is_german_review_candidate(episode) and episode.get("pending") and not has_german_track(episode) for group in series for episode in group["episodes"] ) if needs_missing_scan: - start_scan("missing", force=True, rows_snapshot=rows, series_snapshot=series) + start_scan("missing", force=True, rows_snapshot=rows, series_snapshot=series, pending_only=True) log.info("Bibliotheks-Sync abgeschlossen: %s Filme, %s Serien", len(rows), len(series)) def background_library_sync():