From 3d4fb52fa3e285c4bca71927807d369c8c6285c0 Mon Sep 17 00:00:00 2001 From: nessi Date: Thu, 13 Aug 2026 16:32:21 +0200 Subject: [PATCH] feat: filter "Without German" tab to show only existing or downloading media and exclude season 0 episodes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add is_german_review_candidate() helper function to filter media that exists locally or is currently being downloaded, excluding season 0 (specials) episodes. Apply filter to missing_german_movies and missing_german_series lists to show only actionable items. Update tab description text from "Kein deutsches Audio und keine deutschen Untertitel" to "Vorhanden oder wird gerade geladen · Staffel --- app.py | 10 ++++++++-- templates/index.html | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app.py b/app.py index 0412620..9b8ae81 100644 --- a/app.py +++ b/app.py @@ -179,6 +179,12 @@ def has_german_track(row): languages = row.get("audio_languages", []) + row.get("subtitle_languages", []) return any(language.get("name") == "Deutsch" for language in languages) +def is_german_review_candidate(row): + """Only review media that exists or is currently being downloaded.""" + if row.get("episode") and int(row.get("season") or 0) == 0: + return False + return not row.get("missing") or bool(row.get("downloading")) + def media_row(name, year, media_file, remote, local, extra=None): path = media_file.get("path") if media_file else None if not path and media_file and media_file.get("relativePath"): path = str(Path(media_file.get("basePath") or "") / media_file["relativePath"]) @@ -250,10 +256,10 @@ def index(): series = sonarr_groups() if any(row["pending"] for group in series for row in group["episodes"]): start_scan("sonarr") except Exception as exc: log.exception("Sonarr nicht erreichbar"); error = f"{error + ' | ' if error else ''}Sonarr: {exc}" - missing_german_movies = [row for row in rows if not has_german_track(row)] + missing_german_movies = [row for row in rows if is_german_review_candidate(row) and not has_german_track(row)] missing_german_series = [] for group in series: - episodes = [episode for episode in group["episodes"] if not has_german_track(episode)] + episodes = [episode for episode in group["episodes"] if is_german_review_candidate(episode) and not has_german_track(episode)] if episodes: missing_german_series.append({**group, "episodes": episodes}) return render_template("index.html", rows=rows, series=series, missing_german_movies=missing_german_movies, diff --git a/templates/index.html b/templates/index.html index e8c079b..bfaba23 100644 --- a/templates/index.html +++ b/templates/index.html @@ -17,7 +17,7 @@ {% if sonarr_enabled %}
{{ series|length }} SerienScan wird vorbereitet …Dashboard: {{ local_series_path }}
{% for group in series %}
{{ group.title }} ({{ group.year or '—' }}) · {{ group.episodes|length }} Episoden{% for r in group.episodes %}{% endfor %}
EpisodeQualityStatusAudioUntertitelVideoGröße
{{ r.title }}{{ r.quality }}{{ r.state.label }}
{% for l in r.audio_languages %}{{ l.flag }} {{ l.name }}{% else %}{% endfor %}
{% for l in r.subtitle_languages %}{{ l.flag }} {{ l.name }}{% else %}{% endfor %}
{{ r.video_codec }}{{ r.size }}
{% endfor %}
{% endif %} -
{{ missing_german_movies|length + (missing_german_series|map(attribute='episodes')|map('length')|sum) }} Einträge ohne DeutschKein deutsches Audio und keine deutschen Untertitel
+
{{ missing_german_movies|length + (missing_german_series|map(attribute='episodes')|map('length')|sum) }} Einträge ohne DeutschVorhanden oder wird gerade geladen · Staffel 0 ausgeblendet
{% for r in missing_german_movies %}{% endfor %}
FilmQualitätStatusAudioUntertitelVideoGröße
{{ r.title }}{{ r.year or '' }}{{ r.quality }}Ohne Deutsch
{% for l in r.audio_languages %}{{ l.flag }} {{ l.name }}{% else %}{% endfor %}
{% for l in r.subtitle_languages %}{{ l.flag }} {{ l.name }}{% else %}{% endfor %}
{{ r.video_codec }}{{ r.size }}
{% for group in missing_german_series %}
{{ group.title }} ({{ group.year or '—' }}) · {{ group.episodes|length }} Episoden ohne Deutsch{% for r in group.episodes %}{% endfor %}
EpisodeQualitätStatusAudioUntertitelVideoGröße
{{ r.title }}{{ r.quality }}Ohne Deutsch
{% for l in r.audio_languages %}{{ l.flag }} {{ l.name }}{% else %}{% endfor %}
{% for l in r.subtitle_languages %}{{ l.flag }} {{ l.name }}{% else %}{% endfor %}
{{ r.video_codec }}{{ r.size }}
{% endfor %} {% if not missing_german_movies and not missing_german_series %}
Alle vorhandenen Filme und Episoden haben deutsches Audio oder deutsche Untertitel.
{% endif %}