From 53a7570ba32f98550852e96be1afc752271c8dfe Mon Sep 17 00:00:00 2001 From: Jason Dove Date: Sat, 30 Oct 2021 12:16:39 -0500 Subject: [PATCH] fix epg for multiple playout mode (#461) --- CHANGELOG.md | 1 + .../PlayoutModeSchedulerMultipleTests.cs | 64 +++++++++---------- .../PlayoutModeSchedulerMultiple.cs | 6 +- 3 files changed, 37 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fc7e555d..2256919a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [Unreleased] ### Fixed - Fix EPG entries for Duration schedule items that play multiple items +- Fix EPG entries for Multiple schedule items that play more than one item ### Added - Add fallback filler settings to Channel and global FFmpeg Settings diff --git a/ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerMultipleTests.cs b/ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerMultipleTests.cs index 0b4f051de..5ec112e14 100644 --- a/ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerMultipleTests.cs +++ b/ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerMultipleTests.cs @@ -54,7 +54,7 @@ namespace ErsatzTV.Core.Tests.Scheduling playoutBuilderState.CurrentTime.Should().Be(StartState.CurrentTime.AddHours(3)); playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime); - playoutBuilderState.NextGuideGroup.Should().Be(2); + playoutBuilderState.NextGuideGroup.Should().Be(4); playoutBuilderState.DurationFinish.IsNone.Should().BeTrue(); playoutBuilderState.InFlood.Should().BeFalse(); playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue(); @@ -72,12 +72,12 @@ namespace ErsatzTV.Core.Tests.Scheduling playoutItems[1].MediaItemId.Should().Be(2); playoutItems[1].StartOffset.Should().Be(StartState.CurrentTime.AddHours(1)); - playoutItems[1].GuideGroup.Should().Be(1); + playoutItems[1].GuideGroup.Should().Be(2); playoutItems[1].FillerKind.Should().Be(FillerKind.None); playoutItems[2].MediaItemId.Should().Be(1); playoutItems[2].StartOffset.Should().Be(StartState.CurrentTime.AddHours(2)); - playoutItems[2].GuideGroup.Should().Be(1); + playoutItems[2].GuideGroup.Should().Be(3); playoutItems[2].FillerKind.Should().Be(FillerKind.None); } @@ -119,7 +119,7 @@ namespace ErsatzTV.Core.Tests.Scheduling playoutBuilderState.CurrentTime.Should().Be(StartState.CurrentTime.Add(new TimeSpan(2, 45, 0))); playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime); - playoutBuilderState.NextGuideGroup.Should().Be(2); + playoutBuilderState.NextGuideGroup.Should().Be(4); playoutBuilderState.DurationFinish.IsNone.Should().BeTrue(); playoutBuilderState.InFlood.Should().BeFalse(); playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue(); @@ -137,12 +137,12 @@ namespace ErsatzTV.Core.Tests.Scheduling playoutItems[1].MediaItemId.Should().Be(2); playoutItems[1].StartOffset.Should().Be(StartState.CurrentTime.AddMinutes(55)); - playoutItems[1].GuideGroup.Should().Be(1); + playoutItems[1].GuideGroup.Should().Be(2); playoutItems[1].FillerKind.Should().Be(FillerKind.None); playoutItems[2].MediaItemId.Should().Be(1); playoutItems[2].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(1, 50, 0))); - playoutItems[2].GuideGroup.Should().Be(1); + playoutItems[2].GuideGroup.Should().Be(3); playoutItems[2].FillerKind.Should().Be(FillerKind.None); } @@ -195,7 +195,7 @@ namespace ErsatzTV.Core.Tests.Scheduling playoutBuilderState.CurrentTime.Should().Be(StartState.CurrentTime.AddHours(3)); playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime); - playoutBuilderState.NextGuideGroup.Should().Be(2); + playoutBuilderState.NextGuideGroup.Should().Be(4); playoutBuilderState.DurationFinish.IsNone.Should().BeTrue(); playoutBuilderState.InFlood.Should().BeFalse(); playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue(); @@ -214,27 +214,27 @@ namespace ErsatzTV.Core.Tests.Scheduling playoutItems[1].MediaItemId.Should().Be(2); playoutItems[1].StartOffset.Should().Be(StartState.CurrentTime.AddMinutes(55)); - playoutItems[1].GuideGroup.Should().Be(1); + playoutItems[1].GuideGroup.Should().Be(2); playoutItems[1].FillerKind.Should().Be(FillerKind.None); playoutItems[2].MediaItemId.Should().Be(1); playoutItems[2].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(1, 50, 0))); - playoutItems[2].GuideGroup.Should().Be(1); + playoutItems[2].GuideGroup.Should().Be(3); playoutItems[2].FillerKind.Should().Be(FillerKind.None); playoutItems[3].MediaItemId.Should().Be(3); playoutItems[3].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(2, 45, 0))); - playoutItems[3].GuideGroup.Should().Be(1); + playoutItems[3].GuideGroup.Should().Be(3); playoutItems[3].FillerKind.Should().Be(FillerKind.Tail); playoutItems[4].MediaItemId.Should().Be(4); playoutItems[4].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(2, 50, 0))); - playoutItems[4].GuideGroup.Should().Be(1); + playoutItems[4].GuideGroup.Should().Be(3); playoutItems[4].FillerKind.Should().Be(FillerKind.Tail); playoutItems[5].MediaItemId.Should().Be(3); playoutItems[5].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(2, 55, 0))); - playoutItems[5].GuideGroup.Should().Be(1); + playoutItems[5].GuideGroup.Should().Be(3); playoutItems[5].FillerKind.Should().Be(FillerKind.Tail); } @@ -287,7 +287,7 @@ namespace ErsatzTV.Core.Tests.Scheduling playoutBuilderState.CurrentTime.Should().Be(StartState.CurrentTime.AddHours(3)); playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime); - playoutBuilderState.NextGuideGroup.Should().Be(2); + playoutBuilderState.NextGuideGroup.Should().Be(4); playoutBuilderState.DurationFinish.IsNone.Should().BeTrue(); playoutBuilderState.InFlood.Should().BeFalse(); playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue(); @@ -306,17 +306,17 @@ namespace ErsatzTV.Core.Tests.Scheduling playoutItems[1].MediaItemId.Should().Be(2); playoutItems[1].StartOffset.Should().Be(StartState.CurrentTime.AddMinutes(55)); - playoutItems[1].GuideGroup.Should().Be(1); + playoutItems[1].GuideGroup.Should().Be(2); playoutItems[1].FillerKind.Should().Be(FillerKind.None); playoutItems[2].MediaItemId.Should().Be(1); playoutItems[2].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(1, 50, 0))); - playoutItems[2].GuideGroup.Should().Be(1); + playoutItems[2].GuideGroup.Should().Be(3); playoutItems[2].FillerKind.Should().Be(FillerKind.None); playoutItems[3].MediaItemId.Should().Be(3); playoutItems[3].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(2, 45, 0))); - playoutItems[3].GuideGroup.Should().Be(1); + playoutItems[3].GuideGroup.Should().Be(3); playoutItems[3].FillerKind.Should().Be(FillerKind.Fallback); } @@ -369,7 +369,7 @@ namespace ErsatzTV.Core.Tests.Scheduling playoutBuilderState.CurrentTime.Should().Be(StartState.CurrentTime.Add(new TimeSpan(2, 57, 0))); playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime); - playoutBuilderState.NextGuideGroup.Should().Be(2); + playoutBuilderState.NextGuideGroup.Should().Be(4); playoutBuilderState.DurationFinish.IsNone.Should().BeTrue(); playoutBuilderState.InFlood.Should().BeFalse(); playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue(); @@ -388,27 +388,27 @@ namespace ErsatzTV.Core.Tests.Scheduling playoutItems[1].MediaItemId.Should().Be(2); playoutItems[1].StartOffset.Should().Be(StartState.CurrentTime.AddMinutes(55)); - playoutItems[1].GuideGroup.Should().Be(1); + playoutItems[1].GuideGroup.Should().Be(2); playoutItems[1].FillerKind.Should().Be(FillerKind.None); playoutItems[2].MediaItemId.Should().Be(1); playoutItems[2].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(1, 50, 0))); - playoutItems[2].GuideGroup.Should().Be(1); + playoutItems[2].GuideGroup.Should().Be(3); playoutItems[2].FillerKind.Should().Be(FillerKind.None); playoutItems[3].MediaItemId.Should().Be(3); playoutItems[3].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(2, 45, 0))); - playoutItems[3].GuideGroup.Should().Be(1); + playoutItems[3].GuideGroup.Should().Be(3); playoutItems[3].FillerKind.Should().Be(FillerKind.Tail); playoutItems[4].MediaItemId.Should().Be(4); playoutItems[4].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(2, 49, 0))); - playoutItems[4].GuideGroup.Should().Be(1); + playoutItems[4].GuideGroup.Should().Be(3); playoutItems[4].FillerKind.Should().Be(FillerKind.Tail); playoutItems[5].MediaItemId.Should().Be(3); playoutItems[5].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(2, 53, 0))); - playoutItems[5].GuideGroup.Should().Be(1); + playoutItems[5].GuideGroup.Should().Be(3); playoutItems[5].FillerKind.Should().Be(FillerKind.Tail); } @@ -478,7 +478,7 @@ namespace ErsatzTV.Core.Tests.Scheduling playoutBuilderState.CurrentTime.Should().Be(StartState.CurrentTime.AddHours(3)); playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime); - playoutBuilderState.NextGuideGroup.Should().Be(2); + playoutBuilderState.NextGuideGroup.Should().Be(4); playoutBuilderState.DurationFinish.IsNone.Should().BeTrue(); playoutBuilderState.InFlood.Should().BeFalse(); playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue(); @@ -498,32 +498,32 @@ namespace ErsatzTV.Core.Tests.Scheduling playoutItems[1].MediaItemId.Should().Be(2); playoutItems[1].StartOffset.Should().Be(StartState.CurrentTime.AddMinutes(55)); - playoutItems[1].GuideGroup.Should().Be(1); + playoutItems[1].GuideGroup.Should().Be(2); playoutItems[1].FillerKind.Should().Be(FillerKind.None); playoutItems[2].MediaItemId.Should().Be(1); playoutItems[2].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(1, 50, 0))); - playoutItems[2].GuideGroup.Should().Be(1); + playoutItems[2].GuideGroup.Should().Be(3); playoutItems[2].FillerKind.Should().Be(FillerKind.None); playoutItems[3].MediaItemId.Should().Be(3); playoutItems[3].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(2, 45, 0))); - playoutItems[3].GuideGroup.Should().Be(1); + playoutItems[3].GuideGroup.Should().Be(3); playoutItems[3].FillerKind.Should().Be(FillerKind.Tail); playoutItems[4].MediaItemId.Should().Be(4); playoutItems[4].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(2, 49, 0))); - playoutItems[4].GuideGroup.Should().Be(1); + playoutItems[4].GuideGroup.Should().Be(3); playoutItems[4].FillerKind.Should().Be(FillerKind.Tail); playoutItems[5].MediaItemId.Should().Be(3); playoutItems[5].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(2, 53, 0))); - playoutItems[5].GuideGroup.Should().Be(1); + playoutItems[5].GuideGroup.Should().Be(3); playoutItems[5].FillerKind.Should().Be(FillerKind.Tail); playoutItems[6].MediaItemId.Should().Be(5); playoutItems[6].StartOffset.Should().Be(StartState.CurrentTime.Add(new TimeSpan(2, 57, 0))); - playoutItems[6].GuideGroup.Should().Be(1); + playoutItems[6].GuideGroup.Should().Be(3); playoutItems[6].FillerKind.Should().Be(FillerKind.Fallback); } @@ -593,7 +593,7 @@ namespace ErsatzTV.Core.Tests.Scheduling playoutBuilderState.CurrentTime.Should().Be(StartState.CurrentTime.AddHours(3)); playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime); - playoutBuilderState.NextGuideGroup.Should().Be(2); + playoutBuilderState.NextGuideGroup.Should().Be(4); playoutBuilderState.DurationFinish.IsNone.Should().BeTrue(); playoutBuilderState.InFlood.Should().BeFalse(); playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue(); @@ -613,12 +613,12 @@ namespace ErsatzTV.Core.Tests.Scheduling playoutItems[1].MediaItemId.Should().Be(2); playoutItems[1].StartOffset.Should().Be(StartState.CurrentTime.AddHours(1)); - playoutItems[1].GuideGroup.Should().Be(1); + playoutItems[1].GuideGroup.Should().Be(2); playoutItems[1].FillerKind.Should().Be(FillerKind.None); playoutItems[2].MediaItemId.Should().Be(1); playoutItems[2].StartOffset.Should().Be(StartState.CurrentTime.AddHours(2)); - playoutItems[2].GuideGroup.Should().Be(1); + playoutItems[2].GuideGroup.Should().Be(3); playoutItems[2].FillerKind.Should().Be(FillerKind.None); } diff --git a/ErsatzTV.Core/Scheduling/PlayoutModeSchedulerMultiple.cs b/ErsatzTV.Core/Scheduling/PlayoutModeSchedulerMultiple.cs index 2d9585b22..50c031503 100644 --- a/ErsatzTV.Core/Scheduling/PlayoutModeSchedulerMultiple.cs +++ b/ErsatzTV.Core/Scheduling/PlayoutModeSchedulerMultiple.cs @@ -82,7 +82,8 @@ namespace ErsatzTV.Core.Scheduling nextState = nextState with { CurrentTime = itemEndTimeWithFiller, - MultipleRemaining = nextState.MultipleRemaining.Map(i => i - 1) + MultipleRemaining = nextState.MultipleRemaining.Map(i => i - 1), + NextGuideGroup = nextState.IncrementGuideGroup }; contentEnumerator.MoveNext(); @@ -97,7 +98,8 @@ namespace ErsatzTV.Core.Scheduling nextState = nextState with { ScheduleItemIndex = nextState.ScheduleItemIndex + 1, - MultipleRemaining = None + MultipleRemaining = None, + NextGuideGroup = nextState.DecrementGuideGroup }; }