From befaa037e2107ac5c98dee58c867dd69e44d1bff Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Mon, 29 Jul 2024 15:26:13 -0500 Subject: [PATCH] default duration to make a new epg group per item; default duration to NOT use offline tail (#1834) --- .../Handlers/YamlPlayoutDurationHandler.cs | 12 +++++++++++- .../Handlers/YamlPlayoutPadToNextHandler.cs | 2 ++ .../Handlers/YamlPlayoutPadUntilHandler.cs | 2 ++ .../Models/YamlPlayoutDurationInstruction.cs | 6 ++++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutDurationHandler.cs b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutDurationHandler.cs index 35eadcf1..1fdf4e12 100644 --- a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutDurationHandler.cs +++ b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutDurationHandler.cs @@ -50,6 +50,8 @@ public class YamlPlayoutDurationHandler(EnumeratorCache enumeratorCache) : YamlP targetTime, duration.DiscardAttempts, duration.Trim, + duration.OfflineTail, + duration.EpgGroupPerItem, GetFillerKind(duration), enumerator, fallbackEnumerator); @@ -67,6 +69,8 @@ public class YamlPlayoutDurationHandler(EnumeratorCache enumeratorCache) : YamlP DateTimeOffset targetTime, int discardAttempts, bool trim, + bool offlineTail, + bool guideGroupPerItem, FillerKind fillerKind, IMediaCollectionEnumerator enumerator, Option fallbackEnumerator) @@ -77,6 +81,11 @@ public class YamlPlayoutDurationHandler(EnumeratorCache enumeratorCache) : YamlP { foreach (MediaItem mediaItem in enumerator.Current) { + if (guideGroupPerItem) + { + context.GuideGroup *= -1; + } + TimeSpan itemDuration = DurationForMediaItem(mediaItem); var playoutItem = new PlayoutItem @@ -151,6 +160,7 @@ public class YamlPlayoutDurationHandler(EnumeratorCache enumeratorCache) : YamlP foreach (IMediaCollectionEnumerator fallback in fallbackEnumerator) { remainingToFill = TimeSpan.Zero; + context.CurrentTime = targetTime; done = true; // replace with fallback content @@ -187,6 +197,6 @@ public class YamlPlayoutDurationHandler(EnumeratorCache enumeratorCache) : YamlP } } - return targetTime; + return offlineTail ? targetTime : context.CurrentTime; } } diff --git a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutPadToNextHandler.cs b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutPadToNextHandler.cs index 56343ced..a62ed484 100644 --- a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutPadToNextHandler.cs +++ b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutPadToNextHandler.cs @@ -58,6 +58,8 @@ public class YamlPlayoutPadToNextHandler(EnumeratorCache enumeratorCache) : Yaml targetTime, padToNext.DiscardAttempts, padToNext.Trim, + offlineTail: true, + guideGroupPerItem: false, GetFillerKind(padToNext), enumerator, fallbackEnumerator); diff --git a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutPadUntilHandler.cs b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutPadUntilHandler.cs index f5570ed7..fd229bcf 100644 --- a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutPadUntilHandler.cs +++ b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutPadUntilHandler.cs @@ -68,6 +68,8 @@ public class YamlPlayoutPadUntilHandler(EnumeratorCache enumeratorCache) : YamlP targetTime, padUntil.DiscardAttempts, padUntil.Trim, + offlineTail: true, + guideGroupPerItem: false, GetFillerKind(padUntil), enumerator, fallbackEnumerator); diff --git a/ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutDurationInstruction.cs b/ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutDurationInstruction.cs index 1e42992f..cdf5c1b2 100644 --- a/ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutDurationInstruction.cs +++ b/ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutDurationInstruction.cs @@ -8,6 +8,12 @@ public class YamlPlayoutDurationInstruction : YamlPlayoutInstruction public bool Trim { get; set; } + [YamlMember(Alias = "offline_tail", ApplyNamingConventions = false)] + public bool OfflineTail { get; set; } + + [YamlMember(Alias = "epg_group_per_item", ApplyNamingConventions = false)] + public bool EpgGroupPerItem { get; set; } = true; + public string Fallback { get; set; } [YamlMember(Alias = "discard_attempts", ApplyNamingConventions = false)]