From 91c1731a39f011e9cfcdaa4244ef729f1b0c175a Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Mon, 26 Jan 2026 14:40:09 -0600 Subject: [PATCH] fix playout build failures due to playlist enumerator access --- CHANGELOG.md | 1 + ErsatzTV.Core/Scheduling/Engine/SchedulingEngine.cs | 6 +++++- .../YamlScheduling/Handlers/YamlPlayoutAllHandler.cs | 6 +++++- .../YamlScheduling/Handlers/YamlPlayoutSkipItemsHandler.cs | 4 ++-- .../Handlers/YamlPlayoutSkipToItemHandler.cs | 7 ++++++- 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dec484bb7..0ff293908 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,6 +55,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Sync Plex episode title, plot, year, date added, release date, episode number changes - Sync Jellyfin and Emby library name and type changes - Library type (movies, shows) can only be changed when synchronization is *disabled* for the library in ETV +- Fix some sequential and scripted playout build failures when using playlists or marathons ## [26.1.1] - 2026-01-08 ### Fixed diff --git a/ErsatzTV.Core/Scheduling/Engine/SchedulingEngine.cs b/ErsatzTV.Core/Scheduling/Engine/SchedulingEngine.cs index 66a753a58..53837822e 100644 --- a/ErsatzTV.Core/Scheduling/Engine/SchedulingEngine.cs +++ b/ErsatzTV.Core/Scheduling/Engine/SchedulingEngine.cs @@ -444,9 +444,13 @@ public class SchedulingEngine( return false; } + int enumeratorCount = enumeratorDetails.Enumerator is PlaylistEnumerator playlistEnumerator + ? playlistEnumerator.CountForFiller + : enumeratorDetails.Enumerator.Count; + return AddCountInternal( enumeratorDetails, - enumeratorDetails.Enumerator.Count, + enumeratorCount, fillerKind, customTitle, disableWatermarks); diff --git a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutAllHandler.cs b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutAllHandler.cs index ca541a92b..02ec24260 100644 --- a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutAllHandler.cs +++ b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutAllHandler.cs @@ -31,7 +31,11 @@ public class YamlPlayoutAllHandler(EnumeratorCache enumeratorCache) : YamlPlayou foreach (IMediaCollectionEnumerator enumerator in maybeEnumerator) { - for (var i = 0; i < enumerator.Count; i++) + int enumeratorCount = enumerator is PlaylistEnumerator playlistEnumerator + ? playlistEnumerator.CountForFiller + : enumerator.Count; + + for (var i = 0; i < enumeratorCount; i++) { foreach (string preRollSequence in context.GetPreRollSequence()) { diff --git a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutSkipItemsHandler.cs b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutSkipItemsHandler.cs index 323a54f08..11e3213ce 100644 --- a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutSkipItemsHandler.cs +++ b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutSkipItemsHandler.cs @@ -32,7 +32,7 @@ public class YamlPlayoutSkipItemsHandler(EnumeratorCache enumeratorCache) : IYam int seed = context.Playout.Seed + context.InstructionIndex + context.CurrentTime.DayOfYear; var random = new Random(seed); int enumeratorCount = enumerator is PlaylistEnumerator playlistEnumerator - ? playlistEnumerator.CountForRandom + ? playlistEnumerator.CountForFiller : enumerator.Count; var expression = new Expression(skipItems.SkipItems); expression.EvaluateParameter += (name, e) => @@ -53,7 +53,7 @@ public class YamlPlayoutSkipItemsHandler(EnumeratorCache enumeratorCache) : IYam _ => 0 }; - skipCount %= enumerator.Count; + skipCount %= enumeratorCount; if (skipCount < 0) { diff --git a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutSkipToItemHandler.cs b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutSkipToItemHandler.cs index 0de5cf3bd..e934dc8c6 100644 --- a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutSkipToItemHandler.cs +++ b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutSkipToItemHandler.cs @@ -40,7 +40,12 @@ public class YamlPlayoutSkipToItemHandler(EnumeratorCache enumeratorCache) : IYa foreach (IMediaCollectionEnumerator enumerator in maybeEnumerator) { var done = false; - for (var index = 0; index < enumerator.Count; index++) + + int enumeratorCount = enumerator is PlaylistEnumerator playlistEnumerator + ? playlistEnumerator.CountForFiller + : enumerator.Count; + + for (var index = 0; index < enumeratorCount; index++) { if (done) {