feat: TMDB Discover source + retry yt-dlp once before fallback (v1.0.0.17)
All checks were successful
Publish Release / release (push) Successful in 14s

The fixed TV lists are mostly long-running shows whose first_air_date is
outside ReleaseDateRangeMonths, and paging stops at the first page with no
in-range title, so only ~7 TV candidates were found (5 then dropped by
language). Add a "discover" source per media type that asks /discover for
recent titles in AllowedLanguages, sorted by popularity (1600+ TV results
for en|fr today). TV Discover defaults on, movie Discover off.

yt-dlp failures were mostly passing HTTP 403s from back-to-back requests;
the built-in fallback is sometimes only offered 360p. Retry yt-dlp once
after 15s before falling back.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Martin
2026-10-06 00:00:32 -04:00
parent 45405c815d
commit 1de082b96e
6 changed files with 81 additions and 10 deletions

View File

@@ -14,6 +14,8 @@ namespace Jellyfin.Plugin.CinemaTrailers4Jellyfins.Configuration
public bool SourceUpcoming { get; set; } = true;
public bool SourcePopular { get; set; } = false;
public bool SourceTopRated { get; set; } = false;
// TMDB Discover: newest titles in the allowed languages, most popular first.
public bool SourceDiscover { get; set; } = false;
// ── Sources (TV Shows) ───────────────────────────────────────────────
@@ -21,6 +23,9 @@ namespace Jellyfin.Plugin.CinemaTrailers4Jellyfins.Configuration
public bool SourceTvOnTheAir { get; set; } = true;
public bool SourceTvPopular { get; set; } = false;
public bool SourceTvTopRated { get; set; } = false;
// TMDB Discover: newest shows in the allowed languages, most popular first. On by default:
// the TV lists above are mostly long-running shows the date range filters out.
public bool SourceTvDiscover { get; set; } = true;
// ── Date Range ────────────────────────────────────────────────────────

View File

@@ -120,6 +120,16 @@
Highest rated movies on TMDB, filtered by the date range below.
</div>
</div>
<div class="checkboxContainer checkboxContainer-withDescription">
<label>
<input is="emby-checkbox" type="checkbox" id="source-discover" />
<span>Discover</span>
</label>
<div class="fieldDescription checkboxFieldDescription">
Newest movies in your selected languages, most popular first.
</div>
</div>
</fieldset>
<!-- TV Show Sources -->
@@ -169,6 +179,16 @@
Highest rated TV shows on TMDB, filtered by the date range below.
</div>
</div>
<div class="checkboxContainer checkboxContainer-withDescription">
<label>
<input is="emby-checkbox" type="checkbox" id="source-tv-discover" />
<span>Discover (recommended)</span>
</label>
<div class="fieldDescription checkboxFieldDescription">
Newest TV shows in your selected languages, most popular first. The lists above are mostly long-running shows that the date range drops.
</div>
</div>
</fieldset>
<!-- Date Range -->
@@ -432,10 +452,12 @@
document.getElementById('source-upcoming').checked = config.SourceUpcoming !== false;
document.getElementById('source-popular').checked = !!config.SourcePopular;
document.getElementById('source-top-rated').checked = !!config.SourceTopRated;
document.getElementById('source-discover').checked = !!config.SourceDiscover;
document.getElementById('source-tv-airing-today').checked = config.SourceTvAiringToday !== false;
document.getElementById('source-tv-on-the-air').checked = config.SourceTvOnTheAir !== false;
document.getElementById('source-tv-popular').checked = !!config.SourceTvPopular;
document.getElementById('source-tv-top-rated').checked = !!config.SourceTvTopRated;
document.getElementById('source-tv-discover').checked = config.SourceTvDiscover !== false;
document.getElementById('date-range').value = String(config.ReleaseDateRangeMonths ?? 6);
document.getElementById('download-folder').value = config.DownloadFolder || '';
document.getElementById('max-trailers').value = config.MaxTrailersToDownload ?? 20;
@@ -468,10 +490,12 @@
config.SourceUpcoming = document.getElementById('source-upcoming').checked;
config.SourcePopular = document.getElementById('source-popular').checked;
config.SourceTopRated = document.getElementById('source-top-rated').checked;
config.SourceDiscover = document.getElementById('source-discover').checked;
config.SourceTvAiringToday = document.getElementById('source-tv-airing-today').checked;
config.SourceTvOnTheAir = document.getElementById('source-tv-on-the-air').checked;
config.SourceTvPopular = document.getElementById('source-tv-popular').checked;
config.SourceTvTopRated = document.getElementById('source-tv-top-rated').checked;
config.SourceTvDiscover = document.getElementById('source-tv-discover').checked;
config.ReleaseDateRangeMonths = parseInt(document.getElementById('date-range').value, 10);
config.DownloadFolder = document.getElementById('download-folder').value;
config.MaxTrailersToDownload = parseIntOrDefault(document.getElementById('max-trailers').value, 20);