From 37ceac5651ab12550959af945512cf77723d6e3d Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Mon, 18 Nov 2024 22:07:21 -0600 Subject: [PATCH] add `advance` option to `epg_group` yaml playout instruction (#1942) --- CHANGELOG.md | 5 ++++- .../Handlers/YamlPlayoutEpgGroupHandler.cs | 3 ++- .../Models/YamlPlayoutEpgGroupInstruction.cs | 2 ++ .../YamlScheduling/YamlPlayoutContext.cs | 19 ++++++++++++------- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb850734..daa3037c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,8 +6,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [Unreleased] ### Added - Add `Reset All Playouts` button to top of playouts page -- Add `rewind_on_reset` option to `wait_until` YAML playout instruction to allow +- Add `rewind_on_reset` option to `wait_until` YAML playout instruction - This option allows YAML playouts to start in the past +- Add `advance` option to `epg_group` YAML playout instruction + - When set to `false`, this option will lock the guide group without starting a new guide group + - This can be helpful for "post roll" items that should be part of the previous item's guide group ### Changed - **BREAKING CHANGE**: Change channel identifiers used in XMLTV to work around bad behavior in Plex diff --git a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutEpgGroupHandler.cs b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutEpgGroupHandler.cs index 2eaa4ee4..f5171e58 100644 --- a/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutEpgGroupHandler.cs +++ b/ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutEpgGroupHandler.cs @@ -21,7 +21,8 @@ public class YamlPlayoutEpgGroupHandler : IYamlPlayoutHandler if (epgGroup.EpgGroup) { - context.LockGuideGroup(); + // advance guide group by default + context.LockGuideGroup(epgGroup.Advance is null or true); } else { diff --git a/ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutEpgGroupInstruction.cs b/ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutEpgGroupInstruction.cs index 142c31c4..d98599b3 100644 --- a/ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutEpgGroupInstruction.cs +++ b/ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutEpgGroupInstruction.cs @@ -6,4 +6,6 @@ public class YamlPlayoutEpgGroupInstruction : YamlPlayoutInstruction { [YamlMember(Alias = "epg_group", ApplyNamingConventions = false)] public bool EpgGroup { get; set; } + + public bool? Advance { get; set; } } diff --git a/ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutContext.cs b/ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutContext.cs index f81ddc45..2e4f1794 100644 --- a/ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutContext.cs +++ b/ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutContext.cs @@ -8,6 +8,7 @@ public class YamlPlayoutContext(Playout playout, YamlPlayoutDefinition definitio private readonly System.Collections.Generic.HashSet _visitedInstructions = []; private int _instructionIndex; private bool _guideGroupLocked; + private int _guideGroup = guideGroup; public Playout Playout { get; } = playout; @@ -31,21 +32,25 @@ public class YamlPlayoutContext(Playout playout, YamlPlayoutDefinition definitio { if (_guideGroupLocked) { - return guideGroup; + return _guideGroup; } - guideGroup++; - if (guideGroup > 1000) + _guideGroup++; + if (_guideGroup > 1000) { - guideGroup = 1; + _guideGroup = 1; } - return guideGroup; + return _guideGroup; } - public void LockGuideGroup() + public void LockGuideGroup(bool advance = true) { - NextGuideGroup(); + if (advance) + { + NextGuideGroup(); + } + _guideGroupLocked = true; }