diff --git a/Jellyfin.Plugin.CinemaTrailers4Jellyfins/Configuration/config.html b/Jellyfin.Plugin.CinemaTrailers4Jellyfins/Configuration/config.html index 1e42358..ce83daf 100644 --- a/Jellyfin.Plugin.CinemaTrailers4Jellyfins/Configuration/config.html +++ b/Jellyfin.Plugin.CinemaTrailers4Jellyfins/Configuration/config.html @@ -45,7 +45,9 @@

Trailer Languages

- Only download trailers in the selected languages. + Only download trailers in the selected languages. Both the trailer and the + movie/show itself (its original language) must be in one of them, so a + subtitled foreign trailer is skipped. Leave everything unchecked to allow all languages.

diff --git a/Jellyfin.Plugin.CinemaTrailers4Jellyfins/Jellyfin.Plugin.CinemaTrailers4Jellyfins.csproj b/Jellyfin.Plugin.CinemaTrailers4Jellyfins/Jellyfin.Plugin.CinemaTrailers4Jellyfins.csproj index c5ed9df..cf35637 100644 --- a/Jellyfin.Plugin.CinemaTrailers4Jellyfins/Jellyfin.Plugin.CinemaTrailers4Jellyfins.csproj +++ b/Jellyfin.Plugin.CinemaTrailers4Jellyfins/Jellyfin.Plugin.CinemaTrailers4Jellyfins.csproj @@ -3,8 +3,8 @@ net9.0 Jellyfin.Plugin.CinemaTrailers4Jellyfins - 1.0.0.14 - 1.0.0.14 + 1.0.0.15 + 1.0.0.15 enable false false diff --git a/Jellyfin.Plugin.CinemaTrailers4Jellyfins/ScheduledTasks/DownloadTrailersTask.cs b/Jellyfin.Plugin.CinemaTrailers4Jellyfins/ScheduledTasks/DownloadTrailersTask.cs index 897a1cf..1a973f3 100644 --- a/Jellyfin.Plugin.CinemaTrailers4Jellyfins/ScheduledTasks/DownloadTrailersTask.cs +++ b/Jellyfin.Plugin.CinemaTrailers4Jellyfins/ScheduledTasks/DownloadTrailersTask.cs @@ -177,6 +177,14 @@ namespace Jellyfin.Plugin.CinemaTrailers4Jellyfins.ScheduledTasks continue; } + // A trailer's own language tag is often "en" just because it has English + // subtitles, so also require the title itself to be in an allowed language. + if (allowedLanguages != null && !allowedLanguages.Contains(movie.OriginalLanguage)) + { + _logger.LogDebug("|CinemaTrailers4Jellyfins| Skipping '{Title}': original language '{Lang}' is not allowed", movie.Title, movie.OriginalLanguage); + continue; + } + var trailers = await _tmdbService.GetTrailersAsync( "movie", movie.Id.ToString(), config.TmdbApiKey, allowedLanguages, cancellationToken).ConfigureAwait(false); @@ -284,6 +292,14 @@ namespace Jellyfin.Plugin.CinemaTrailers4Jellyfins.ScheduledTasks continue; } + // A trailer's own language tag is often "en" just because it has English + // subtitles, so also require the title itself to be in an allowed language. + if (allowedLanguages != null && !allowedLanguages.Contains(show.OriginalLanguage)) + { + _logger.LogDebug("|CinemaTrailers4Jellyfins| Skipping '{Title}': original language '{Lang}' is not allowed", show.Title, show.OriginalLanguage); + continue; + } + var trailers = await _tmdbService.GetTrailersAsync( "tv", show.Id.ToString(), config.TmdbApiKey, allowedLanguages, cancellationToken).ConfigureAwait(false); diff --git a/Jellyfin.Plugin.CinemaTrailers4Jellyfins/Services/TmdbService.cs b/Jellyfin.Plugin.CinemaTrailers4Jellyfins/Services/TmdbService.cs index 46a551a..036eb0d 100644 --- a/Jellyfin.Plugin.CinemaTrailers4Jellyfins/Services/TmdbService.cs +++ b/Jellyfin.Plugin.CinemaTrailers4Jellyfins/Services/TmdbService.cs @@ -14,7 +14,7 @@ namespace Jellyfin.Plugin.CinemaTrailers4Jellyfins.Services { public record TmdbVideo(string Key, string Name, string Language, bool Official, int Size); - public record TmdbMediaResult(int Id, string Title, string ReleaseDate) + public record TmdbMediaResult(int Id, string Title, string ReleaseDate, string OriginalLanguage) { public int? Year => DateTime.TryParse(ReleaseDate, out var d) ? d.Year : (int?)null; } @@ -170,6 +170,7 @@ namespace Jellyfin.Plugin.CinemaTrailers4Jellyfins.Services var releaseDate = entry.TryGetProperty(dateField, out var rd) ? rd.GetString() ?? string.Empty : string.Empty; var title = entry.TryGetProperty(titleField, out var t) ? t.GetString() ?? string.Empty : string.Empty; var id = entry.GetProperty("id").GetInt32(); + var originalLanguage = entry.TryGetProperty("original_language", out var ol) ? ol.GetString() ?? string.Empty : string.Empty; if (releasedAfter.HasValue && DateTime.TryParse(releaseDate, out var parsed)) { @@ -177,7 +178,7 @@ namespace Jellyfin.Plugin.CinemaTrailers4Jellyfins.Services } anyInRange = true; - results.Add(new TmdbMediaResult(id, title, releaseDate)); + results.Add(new TmdbMediaResult(id, title, releaseDate, originalLanguage)); } if (page >= totalPages || (releasedAfter.HasValue && !anyInRange)) diff --git a/build.yaml b/build.yaml index 6583300..00e7981 100644 --- a/build.yaml +++ b/build.yaml @@ -1,5 +1,5 @@ --- -version: 1.0.0.14 +version: 1.0.0.15 name: CinemaTrailers4Jellyfins guid: b581493e-1046-40ed-b6dc-cb8027624984 description: > @@ -12,9 +12,10 @@ category: General owner: 514mart targetAbi: 10.11.0.0 changelog: - - When yt-dlp fails part-way, its partial download files (.part, .ytdl, - separate video/audio) are now deleted instead of being left in the - trailer folder + - Trailer Languages now also checks the original language of the movie or + show. Before, only the trailer's own language tag was checked, and + TMDB often tags subtitled foreign trailers as English, so Korean, + Chinese or Japanese trailers got through dotnetProjects: - name: Jellyfin.Plugin.CinemaTrailers4Jellyfins