From 8aa55fdfce1c8c012fffa4107ba2df8cb71e87d9 Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Tue, 30 Jul 2024 08:36:14 -0500 Subject: [PATCH] replace new_epg_group instruction with epg_group; copy sequence custom title to sequence items --- ...Handler.cs => YamlPlayoutEpgGroupHandler.cs} | 14 +++++++++++--- .../Models/YamlPlayoutEpgGroupInstruction.cs | 9 +++++++++ .../Models/YamlPlayoutNewEpgGroupInstruction.cs | 9 --------- .../YamlScheduling/YamlPlayoutBuilder.cs | 10 ++++++++-- .../YamlScheduling/YamlPlayoutContext.cs | 17 +++++++++++++++++ 5 files changed, 45 insertions(+), 14 deletions(-) rename ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/{YamlPlayoutNewEpgGroupHandler.cs => YamlPlayoutEpgGroupHandler.cs} (62%) create mode 100644 ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutEpgGroupInstruction.cs delete mode 100644 ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutNewEpgGroupInstruction.cs diff --git a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutNewEpgGroupHandler.cs b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutEpgGroupHandler.cs similarity index 62% rename from ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutNewEpgGroupHandler.cs rename to ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutEpgGroupHandler.cs index 63737e59..37d3f842 100644 --- a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutNewEpgGroupHandler.cs +++ b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutEpgGroupHandler.cs @@ -3,7 +3,7 @@ using Microsoft.Extensions.Logging; namespace ErsatzTV.Core.Scheduling.YamlScheduling.Handlers; -public class YamlPlayoutNewEpgGroupHandler : IYamlPlayoutHandler +public class YamlPlayoutEpgGroupHandler : IYamlPlayoutHandler { public bool Reset => false; @@ -13,12 +13,20 @@ public class YamlPlayoutNewEpgGroupHandler : IYamlPlayoutHandler ILogger logger, CancellationToken cancellationToken) { - if (instruction is not YamlPlayoutNewEpgGroupInstruction) + if (instruction is not YamlPlayoutEpgGroupInstruction epgGroup) { return Task.FromResult(false); } - // context.NextGuideGroup() *= -1; + if (epgGroup.EpgGroup) + { + context.LockGuideGroup(); + } + else + { + context.UnlockGuideGroup(); + } + return Task.FromResult(true); } } diff --git a/ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutEpgGroupInstruction.cs b/ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutEpgGroupInstruction.cs new file mode 100644 index 00000000..142c31c4 --- /dev/null +++ b/ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutEpgGroupInstruction.cs @@ -0,0 +1,9 @@ +using YamlDotNet.Serialization; + +namespace ErsatzTV.Core.Scheduling.YamlScheduling.Models; + +public class YamlPlayoutEpgGroupInstruction : YamlPlayoutInstruction +{ + [YamlMember(Alias = "epg_group", ApplyNamingConventions = false)] + public bool EpgGroup { get; set; } +} diff --git a/ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutNewEpgGroupInstruction.cs b/ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutNewEpgGroupInstruction.cs deleted file mode 100644 index 1261d433..00000000 --- a/ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutNewEpgGroupInstruction.cs +++ /dev/null @@ -1,9 +0,0 @@ -using YamlDotNet.Serialization; - -namespace ErsatzTV.Core.Scheduling.YamlScheduling.Models; - -public class YamlPlayoutNewEpgGroupInstruction : YamlPlayoutInstruction -{ - [YamlMember(Alias = "new_epg_group", ApplyNamingConventions = false)] - public string NewEpgGroup { get; set; } -} diff --git a/ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutBuilder.cs b/ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutBuilder.cs index 510f6323..049e7bc5 100644 --- a/ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutBuilder.cs +++ b/ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutBuilder.cs @@ -213,6 +213,12 @@ public class YamlPlayoutBuilder( i.SequenceKey = sequenceInstruction.Sequence; i.SequenceGuid = sequenceGuid; + // copy custom title + if (!string.IsNullOrWhiteSpace(sequenceInstruction.CustomTitle)) + { + i.CustomTitle = sequenceInstruction.CustomTitle; + } + context.Definition.Playout.Add(i); } break; @@ -237,7 +243,7 @@ public class YamlPlayoutBuilder( { YamlPlayoutRepeatInstruction => new YamlPlayoutRepeatHandler(), YamlPlayoutWaitUntilInstruction => new YamlPlayoutWaitUntilHandler(), - YamlPlayoutNewEpgGroupInstruction => new YamlPlayoutNewEpgGroupHandler(), + YamlPlayoutEpgGroupInstruction => new YamlPlayoutEpgGroupHandler(), YamlPlayoutShuffleSequenceInstruction => new YamlPlayoutShuffleSequenceHandler(), YamlPlayoutSkipItemsInstruction => new YamlPlayoutSkipItemsHandler(enumeratorCache), @@ -285,7 +291,7 @@ public class YamlPlayoutBuilder( { "all", typeof(YamlPlayoutAllInstruction) }, { "count", typeof(YamlPlayoutCountInstruction) }, { "duration", typeof(YamlPlayoutDurationInstruction) }, - { "new_epg_group", typeof(YamlPlayoutNewEpgGroupInstruction) }, + { "epg_group", typeof(YamlPlayoutEpgGroupInstruction) }, { "pad_to_next", typeof(YamlPlayoutPadToNextInstruction) }, { "pad_until", typeof(YamlPlayoutPadUntilInstruction) }, { "repeat", typeof(YamlPlayoutRepeatInstruction) }, diff --git a/ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutContext.cs b/ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutContext.cs index 7138b47d..f81ddc45 100644 --- a/ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutContext.cs +++ b/ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutContext.cs @@ -7,6 +7,7 @@ public class YamlPlayoutContext(Playout playout, YamlPlayoutDefinition definitio { private readonly System.Collections.Generic.HashSet _visitedInstructions = []; private int _instructionIndex; + private bool _guideGroupLocked; public Playout Playout { get; } = playout; @@ -28,6 +29,11 @@ public class YamlPlayoutContext(Playout playout, YamlPlayoutDefinition definitio public int NextGuideGroup() { + if (_guideGroupLocked) + { + return guideGroup; + } + guideGroup++; if (guideGroup > 1000) { @@ -36,4 +42,15 @@ public class YamlPlayoutContext(Playout playout, YamlPlayoutDefinition definitio return guideGroup; } + + public void LockGuideGroup() + { + NextGuideGroup(); + _guideGroupLocked = true; + } + + public void UnlockGuideGroup() + { + _guideGroupLocked = false; + } }