2 Commits

Author SHA1 Message Date
Martin
322d6cc65d feat: only play animated trailers before animated content (v1.0.0.11)
All checks were successful
Publish Release / release (push) Successful in 10s
An anime trailer could play before live-action content: the genre filter
accepts any single shared genre (anime is tagged Animation + Drama/Action/...),
and when nothing matched it fell back to the whole pool. Trailers tagged
Animation or Anime are now dropped for non-animated features before the
filters and the fallback run, so a live-action feature gets no trailer
rather than an animated one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 17:52:33 -04:00
gitea-actions
c208a81b75 chore: update manifest.json for v1.0.0.10 2026-10-05 21:42:55 +00:00
4 changed files with 32 additions and 13 deletions

View File

@@ -3,8 +3,8 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<RootNamespace>Jellyfin.Plugin.CinemaTrailers4Jellyfins</RootNamespace> <RootNamespace>Jellyfin.Plugin.CinemaTrailers4Jellyfins</RootNamespace>
<AssemblyVersion>1.0.0.10</AssemblyVersion> <AssemblyVersion>1.0.0.11</AssemblyVersion>
<FileVersion>1.0.0.10</FileVersion> <FileVersion>1.0.0.11</FileVersion>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<GenerateDocumentationFile>false</GenerateDocumentationFile> <GenerateDocumentationFile>false</GenerateDocumentationFile>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors> <TreatWarningsAsErrors>false</TreatWarningsAsErrors>

View File

@@ -147,9 +147,16 @@ namespace Jellyfin.Plugin.CinemaTrailers4Jellyfins.Services
} }
else else
{ {
// Apply enabled filters. If nothing survives, fall back to the full pool. // Animation is a style, not a topic: animated trailers (anime included) only play
var filtered = ApplyFilters(pairs, feature, config); // before animated content. Applied before the fallback below, so a live-action
var pool = filtered.Count > 0 ? filtered : pairs; // feature never gets one — it gets no trailer instead.
var eligible = IsAnimated(feature)
? pairs
: pairs.Where(p => !IsAnimated(p.Movie)).ToList();
// Apply enabled filters. If nothing survives, fall back to the eligible pool.
var filtered = ApplyFilters(eligible, feature, config);
var pool = filtered.Count > 0 ? filtered : eligible;
// Prefer unseen trailers within the pool; reset the cycle when all have been shown. // Prefer unseen trailers within the pool; reset the cycle when all have been shown.
pool = ApplyAvoidRepeats(pool, user.Id, config.AvoidRepeats); pool = ApplyAvoidRepeats(pool, user.Id, config.AvoidRepeats);
@@ -229,6 +236,12 @@ namespace Jellyfin.Plugin.CinemaTrailers4Jellyfins.Services
return new IntroInfo { ItemId = movie.Id, Path = movie.Path }; return new IntroInfo { ItemId = movie.Id, Path = movie.Path };
} }
// TMDB tags anime as "Animation"; anime metadata providers (e.g. AniDB) use "Anime".
private static readonly string[] AnimatedGenres = { "Animation", "Anime" };
private static bool IsAnimated(BaseItem item)
=> item.Genres.Any(g => AnimatedGenres.Contains(g, StringComparer.OrdinalIgnoreCase));
private static List<(Movie Movie, BaseItem Trailer)> ApplyFilters( private static List<(Movie Movie, BaseItem Trailer)> ApplyFilters(
List<(Movie Movie, BaseItem Trailer)> pairs, List<(Movie Movie, BaseItem Trailer)> pairs,
BaseItem feature, BaseItem feature,

View File

@@ -1,5 +1,5 @@
--- ---
version: 1.0.0.10 version: 1.0.0.11
name: CinemaTrailers4Jellyfins name: CinemaTrailers4Jellyfins
guid: b581493e-1046-40ed-b6dc-cb8027624984 guid: b581493e-1046-40ed-b6dc-cb8027624984
description: > description: >
@@ -12,13 +12,11 @@ category: General
owner: 514mart owner: 514mart
targetAbi: 10.11.0.0 targetAbi: 10.11.0.0
changelog: changelog:
- Fix trailer downloads, broken by a YouTube change. YouTube no longer - Animated trailers (anime included) now only play before animated
serves combined video+audio files, so the built-in downloader now fetches content. Before, an anime trailer could play before a live-action
the video and audio separately, merges them with ffmpeg (no re-encode) movie or show when they shared a genre like Drama or Action, or when
and deletes the separate files afterwards no trailer matched the genre filter. A live-action feature now gets no
- A failed download no longer leaves an empty trailer folder behind. trailer rather than an animated one
Empty folders counted toward "Max trailers to keep" (pushing out real
trailers) and were never retried
dotnetProjects: dotnetProjects:
- name: Jellyfin.Plugin.CinemaTrailers4Jellyfins - name: Jellyfin.Plugin.CinemaTrailers4Jellyfins

View File

@@ -8,6 +8,14 @@
"owner": "514mart", "owner": "514mart",
"imageUrl": "https://www.git.quarantinedstudio.com/mvezina/CinemaTrailers4Jellyfins/raw/branch/main/Jellyfin.Plugin.CinemaTrailers4Jellyfins/Images/logo.svg", "imageUrl": "https://www.git.quarantinedstudio.com/mvezina/CinemaTrailers4Jellyfins/raw/branch/main/Jellyfin.Plugin.CinemaTrailers4Jellyfins/Images/logo.svg",
"versions": [ "versions": [
{
"checksum": "13e6467ce568b1abe987ef5a8a0ee95d",
"changelog": "- Fix trailer downloads, broken by a YouTube change. YouTube no longer serves combined video+audio files, so the built-in downloader now fetches the video and audio separately, merges them with ffmpeg (no re-encode) and deletes the separate files afterwards\n- A failed download no longer leaves an empty trailer folder behind. Empty folders counted toward \"Max trailers to keep\" (pushing out real trailers) and were never retried\n",
"targetAbi": "10.11.0.0",
"sourceUrl": "https://www.git.quarantinedstudio.com/mvezina/CinemaTrailers4Jellyfins/releases/download/v1.0.0.10/cinematrailers4jellyfins_1.0.0.10.zip",
"timestamp": "2026-10-05T21:42:55Z",
"version": "1.0.0.10"
},
{ {
"checksum": "9594d14a5fed94ee5eea55d72c71728c", "checksum": "9594d14a5fed94ee5eea55d72c71728c",
"changelog": "- Skip trailers and pre-roll/feature pre-roll bumpers the current user can't actually access (e.g. a library not in their library access list) \u2014 some Cinema Mode clients hang indefinitely trying to play an inaccessible item, so these are now filtered out per-user instead\n", "changelog": "- Skip trailers and pre-roll/feature pre-roll bumpers the current user can't actually access (e.g. a library not in their library access list) \u2014 some Cinema Mode clients hang indefinitely trying to play an inaccessible item, so these are now filtered out per-user instead\n",