diff --git a/ErsatzTV.Application/Playouts/Commands/ReplacePlayoutAlternateScheduleItemsHandler.cs b/ErsatzTV.Application/Playouts/Commands/ReplacePlayoutAlternateScheduleItemsHandler.cs index d20173bc4..afa64cd5e 100644 --- a/ErsatzTV.Application/Playouts/Commands/ReplacePlayoutAlternateScheduleItemsHandler.cs +++ b/ErsatzTV.Application/Playouts/Commands/ReplacePlayoutAlternateScheduleItemsHandler.cs @@ -62,10 +62,9 @@ public class ReplacePlayoutAlternateScheduleItemsHandler : foreach (DateTimeOffset dayToCheck in daysToCheck) { - ProgramSchedule schedule = PlayoutScheduleSelector.GetProgramScheduleFor( - playout.ProgramSchedule, - playout.ProgramScheduleAlternates, - dayToCheck); + ProgramSchedule schedule = AlternateScheduleSelector + .GetScheduleForDate(playout.ProgramScheduleAlternates, dayToCheck) + .Match(s => s.ProgramSchedule, playout.ProgramSchedule); existingScheduleMap.Add(dayToCheck, schedule); } @@ -136,10 +135,9 @@ public class ReplacePlayoutAlternateScheduleItemsHandler : { foreach (DateTimeOffset dayToCheck in daysToCheck) { - ProgramSchedule schedule = PlayoutScheduleSelector.GetProgramScheduleFor( - playout.ProgramSchedule, - playout.ProgramScheduleAlternates, - dayToCheck); + ProgramSchedule schedule = AlternateScheduleSelector + .GetScheduleForDate(playout.ProgramScheduleAlternates, dayToCheck) + .Match(s => s.ProgramSchedule, playout.ProgramSchedule); if (existingScheduleMap.TryGetValue(dayToCheck, out ProgramSchedule existingValue) && existingValue.Id != schedule.Id) diff --git a/ErsatzTV.Application/Playouts/Queries/GetPlayoutAlternateSchedulesHandler.cs b/ErsatzTV.Application/Playouts/Queries/GetPlayoutAlternateSchedulesHandler.cs index e04fa7a5b..ed5df9bde 100644 --- a/ErsatzTV.Application/Playouts/Queries/GetPlayoutAlternateSchedulesHandler.cs +++ b/ErsatzTV.Application/Playouts/Queries/GetPlayoutAlternateSchedulesHandler.cs @@ -1,4 +1,5 @@ using ErsatzTV.Core.Domain; +using ErsatzTV.Core.Scheduling; using ErsatzTV.Infrastructure.Data; using ErsatzTV.Infrastructure.Extensions; using Microsoft.EntityFrameworkCore; @@ -6,27 +7,24 @@ using static ErsatzTV.Application.Playouts.Mapper; namespace ErsatzTV.Application.Playouts; -public class GetPlayoutAlternateSchedulesHandler : +public class GetPlayoutAlternateSchedulesHandler(IDbContextFactory dbContextFactory) : IRequestHandler> { - private readonly IDbContextFactory _dbContextFactory; - - public GetPlayoutAlternateSchedulesHandler(IDbContextFactory dbContextFactory) => - _dbContextFactory = dbContextFactory; - public async Task> Handle( GetPlayoutAlternateSchedules request, CancellationToken cancellationToken) { - await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken); + await using TvContext dbContext = await dbContextFactory.CreateDbContextAsync(cancellationToken); List result = await dbContext.ProgramScheduleAlternates + .AsNoTracking() .Filter(psa => psa.PlayoutId == request.PlayoutId) .Include(psa => psa.ProgramSchedule) .ToListAsync(cancellationToken) .Map(list => list.Map(ProjectToViewModel).ToList()); Option maybeDefaultSchedule = await dbContext.Playouts + .AsNoTracking() .Include(p => p.ProgramSchedule) .SelectOneAsync(p => p.Id, p => p.Id == request.PlayoutId, cancellationToken) .MapT(p => p.ProgramSchedule); @@ -40,9 +38,9 @@ public class GetPlayoutAlternateSchedulesHandler : ProgramScheduleId = defaultSchedule.Id, ProgramSchedule = defaultSchedule, Index = result.Map(i => i.Index).DefaultIfEmpty().Max() + 1, - DaysOfMonth = ProgramScheduleAlternate.AllDaysOfMonth(), - DaysOfWeek = ProgramScheduleAlternate.AllDaysOfWeek(), - MonthsOfYear = ProgramScheduleAlternate.AllMonthsOfYear() + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear() }; result.Add(ProjectToViewModel(psa)); diff --git a/ErsatzTV.Application/Scheduling/Commands/PreviewBlockPlayoutHandler.cs b/ErsatzTV.Application/Scheduling/Commands/PreviewBlockPlayoutHandler.cs index 2a3ab1087..4d69a55bf 100644 --- a/ErsatzTV.Application/Scheduling/Commands/PreviewBlockPlayoutHandler.cs +++ b/ErsatzTV.Application/Scheduling/Commands/PreviewBlockPlayoutHandler.cs @@ -49,9 +49,9 @@ public class PreviewBlockPlayoutHandler( [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), Template = template } ], diff --git a/ErsatzTV.Core.Tests/FFmpeg/DecoSelectorTests.cs b/ErsatzTV.Core.Tests/FFmpeg/DecoSelectorTests.cs index eba251b4b..d769e720c 100644 --- a/ErsatzTV.Core.Tests/FFmpeg/DecoSelectorTests.cs +++ b/ErsatzTV.Core.Tests/FFmpeg/DecoSelectorTests.cs @@ -1,6 +1,7 @@ using ErsatzTV.Core.Domain; using ErsatzTV.Core.Domain.Scheduling; using ErsatzTV.Core.FFmpeg; +using ErsatzTV.Core.Scheduling; using Microsoft.Extensions.Logging; using NUnit.Framework; using Serilog; @@ -51,9 +52,9 @@ public class DecoSelectorTests Id = 1, Template = new Template { Id = 1, Name = "Test Template" }, DecoTemplate = decoTemplate, - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear() + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear() }; var playout = new Playout @@ -105,9 +106,9 @@ public class DecoSelectorTests Id = 1, Template = new Template { Id = 1, Name = "Test Template" }, DecoTemplate = decoTemplate, - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear() + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear() }; var playout = new Playout diff --git a/ErsatzTV.Core.Tests/FFmpeg/GraphicsElementSelectorTests.cs b/ErsatzTV.Core.Tests/FFmpeg/GraphicsElementSelectorTests.cs index b8cba18d0..62e358581 100644 --- a/ErsatzTV.Core.Tests/FFmpeg/GraphicsElementSelectorTests.cs +++ b/ErsatzTV.Core.Tests/FFmpeg/GraphicsElementSelectorTests.cs @@ -2,6 +2,7 @@ using ErsatzTV.Core.Domain; using ErsatzTV.Core.Domain.Filler; using ErsatzTV.Core.Domain.Scheduling; using ErsatzTV.Core.FFmpeg; +using ErsatzTV.Core.Scheduling; using Microsoft.Extensions.Logging; using NUnit.Framework; using Serilog; @@ -138,9 +139,9 @@ public class GraphicsElementSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithInherit } ] @@ -152,9 +153,9 @@ public class GraphicsElementSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithDisable } ] @@ -166,9 +167,9 @@ public class GraphicsElementSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithOverride } ] @@ -180,9 +181,9 @@ public class GraphicsElementSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithMerge } ] @@ -194,9 +195,9 @@ public class GraphicsElementSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithMergeFillerDisabled } ] @@ -247,9 +248,9 @@ public class GraphicsElementSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithInherit } ], @@ -265,9 +266,9 @@ public class GraphicsElementSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithMerge } ], @@ -283,9 +284,9 @@ public class GraphicsElementSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithMerge } ], @@ -301,9 +302,9 @@ public class GraphicsElementSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithOverride } ], diff --git a/ErsatzTV.Core.Tests/FFmpeg/WatermarkSelectorTests.cs b/ErsatzTV.Core.Tests/FFmpeg/WatermarkSelectorTests.cs index 53ea06b4f..d647152ab 100644 --- a/ErsatzTV.Core.Tests/FFmpeg/WatermarkSelectorTests.cs +++ b/ErsatzTV.Core.Tests/FFmpeg/WatermarkSelectorTests.cs @@ -2,6 +2,7 @@ using ErsatzTV.Core.Domain; using ErsatzTV.Core.Domain.Scheduling; using ErsatzTV.Core.FFmpeg; using ErsatzTV.Core.Interfaces.Images; +using ErsatzTV.Core.Scheduling; using Microsoft.Extensions.Logging; using NSubstitute; using NUnit.Framework; @@ -134,9 +135,9 @@ public class WatermarkSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithInherit } ] @@ -148,9 +149,9 @@ public class WatermarkSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithDisable } ] @@ -162,9 +163,9 @@ public class WatermarkSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithOverride } ] @@ -238,9 +239,9 @@ public class WatermarkSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithInherit } ], @@ -264,9 +265,9 @@ public class WatermarkSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithInherit } ], @@ -290,9 +291,9 @@ public class WatermarkSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithMerge } ], @@ -316,9 +317,9 @@ public class WatermarkSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithMerge } ], @@ -338,9 +339,9 @@ public class WatermarkSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithMerge } ], @@ -364,9 +365,9 @@ public class WatermarkSelectorTests [ new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), DecoTemplate = decoWithMerge } ], diff --git a/ErsatzTV.Core.Tests/Scheduling/PlayoutTemplateSelectorTests.cs b/ErsatzTV.Core.Tests/Scheduling/AlternateScheduleSelectorTests.cs similarity index 62% rename from ErsatzTV.Core.Tests/Scheduling/PlayoutTemplateSelectorTests.cs rename to ErsatzTV.Core.Tests/Scheduling/AlternateScheduleSelectorTests.cs index 85f361534..1c546f13e 100644 --- a/ErsatzTV.Core.Tests/Scheduling/PlayoutTemplateSelectorTests.cs +++ b/ErsatzTV.Core.Tests/Scheduling/AlternateScheduleSelectorTests.cs @@ -5,10 +5,10 @@ using Shouldly; namespace ErsatzTV.Core.Tests.Scheduling; -public static class PlayoutTemplateSelectorTests +public static class AlternateScheduleSelectorTests { [TestFixture] - public class GetPlayoutTemplateFor + public class GetScheduleForDate { private static readonly TimeSpan Offset = TimeSpan.FromHours(-5); @@ -17,9 +17,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 4, StartDay = 1, @@ -27,7 +27,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 15 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2024, 3, 31, 0, 0, 0, Offset)); @@ -39,9 +39,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 4, StartDay = 1, @@ -49,7 +49,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 15 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2024, 4, 1, 0, 0, 0, Offset)); @@ -61,9 +61,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 4, StartDay = 1, @@ -71,7 +71,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 15 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2024, 4, 20, 0, 0, 0, Offset)); @@ -83,9 +83,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 4, StartDay = 1, @@ -93,7 +93,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 15 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2024, 6, 15, 0, 0, 0, Offset)); @@ -105,9 +105,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 4, StartDay = 1, @@ -115,7 +115,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 15 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2024, 6, 16, 0, 0, 0, Offset)); @@ -127,9 +127,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 2, StartDay = 29, @@ -137,7 +137,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 15 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); @@ -149,9 +149,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 2, StartDay = 29, @@ -159,7 +159,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 15 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); @@ -171,9 +171,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 1, StartDay = 1, @@ -181,7 +181,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 29 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); @@ -193,9 +193,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 1, StartDay = 1, @@ -203,7 +203,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 29 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); @@ -215,9 +215,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 6, StartDay = 15, @@ -225,7 +225,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 1 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2024, 6, 14, 0, 0, 0, Offset)); @@ -237,9 +237,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 6, StartDay = 15, @@ -247,7 +247,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 1 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2024, 6, 15, 0, 0, 0, Offset)); @@ -259,9 +259,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 6, StartDay = 15, @@ -269,7 +269,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 1 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2024, 7, 20, 0, 0, 0, Offset)); @@ -281,9 +281,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 6, StartDay = 15, @@ -291,7 +291,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 1 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2024, 4, 1, 0, 0, 0, Offset)); @@ -303,9 +303,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 6, StartDay = 15, @@ -313,7 +313,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 1 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2024, 4, 2, 0, 0, 0, Offset)); @@ -325,9 +325,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 2, StartDay = 29, @@ -335,7 +335,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 1 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); @@ -347,9 +347,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 2, StartDay = 29, @@ -357,7 +357,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 1 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); @@ -369,9 +369,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 5, StartDay = 1, @@ -379,7 +379,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 29 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); @@ -391,9 +391,9 @@ public static class PlayoutTemplateSelectorTests { var template = new PlayoutTemplate { - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), LimitToDateRange = true, StartMonth = 5, StartDay = 1, @@ -401,7 +401,7 @@ public static class PlayoutTemplateSelectorTests EndDay = 29 }; - Option result = PlayoutTemplateSelector.GetPlayoutTemplateFor( + Option result = AlternateScheduleSelector.GetScheduleForDate( new List { template }, new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); diff --git a/ErsatzTV.Core.Tests/Scheduling/BlockScheduling/BlockPlayoutBuilderTests.cs b/ErsatzTV.Core.Tests/Scheduling/BlockScheduling/BlockPlayoutBuilderTests.cs index 04c47610e..275cf18ef 100644 --- a/ErsatzTV.Core.Tests/Scheduling/BlockScheduling/BlockPlayoutBuilderTests.cs +++ b/ErsatzTV.Core.Tests/Scheduling/BlockScheduling/BlockPlayoutBuilderTests.cs @@ -87,9 +87,9 @@ public class BlockPlayoutBuilderTests Index = 1, Template = template, TemplateId = template.Id, - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear() + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear() }; var playout = new Playout @@ -221,9 +221,9 @@ public class BlockPlayoutBuilderTests Index = 1, Template = template, TemplateId = template.Id, - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear() + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear() }; var playout = new Playout @@ -383,9 +383,9 @@ public class BlockPlayoutBuilderTests Index = 1, Template = template, TemplateId = template.Id, - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear() + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear() }; var playout = new Playout @@ -553,9 +553,9 @@ public class BlockPlayoutBuilderTests Index = 1, Template = template, TemplateId = template.Id, - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear() + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear() }; var playout = new Playout diff --git a/ErsatzTV.Core.Tests/Scheduling/BlockScheduling/EffectiveBlockTests.cs b/ErsatzTV.Core.Tests/Scheduling/BlockScheduling/EffectiveBlockTests.cs index 6c4762c5a..8086f0e15 100644 --- a/ErsatzTV.Core.Tests/Scheduling/BlockScheduling/EffectiveBlockTests.cs +++ b/ErsatzTV.Core.Tests/Scheduling/BlockScheduling/EffectiveBlockTests.cs @@ -1,4 +1,5 @@ using ErsatzTV.Core.Domain.Scheduling; +using ErsatzTV.Core.Scheduling; using ErsatzTV.Core.Scheduling.BlockScheduling; using NUnit.Framework; using Shouldly; @@ -54,8 +55,8 @@ public class EffectiveBlockTests { Index = 1, DaysOfWeek = [DayOfWeek.Sunday], - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), Template = SingleBlockTemplate(now), DateUpdated = now.UtcDateTime } @@ -80,8 +81,8 @@ public class EffectiveBlockTests { Index = 1, DaysOfWeek = [DayOfWeek.Monday, DayOfWeek.Wednesday, DayOfWeek.Friday], - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), Template = SingleBlockTemplate(now), DateUpdated = now.UtcDateTime } @@ -114,9 +115,9 @@ public class EffectiveBlockTests new() { Index = 1, - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), Template = SingleBlockTemplate(now), // 9am block DateUpdated = now.UtcDateTime } @@ -153,9 +154,9 @@ public class EffectiveBlockTests new() { Index = 1, - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), Template = SingleBlockTemplate(now), // 9am block DateUpdated = now.UtcDateTime } diff --git a/ErsatzTV.Core/Domain/ProgramScheduleAlternate.cs b/ErsatzTV.Core/Domain/ProgramScheduleAlternate.cs index 2d05438e4..f18b2cecb 100644 --- a/ErsatzTV.Core/Domain/ProgramScheduleAlternate.cs +++ b/ErsatzTV.Core/Domain/ProgramScheduleAlternate.cs @@ -1,6 +1,8 @@ +using ErsatzTV.Core.Domain.Scheduling; + namespace ErsatzTV.Core.Domain; -public class ProgramScheduleAlternate +public class ProgramScheduleAlternate : IAlternateScheduleItem { public int Id { get; set; } public int PlayoutId { get; set; } @@ -12,17 +14,10 @@ public class ProgramScheduleAlternate public ICollection DaysOfMonth { get; set; } public ICollection MonthsOfYear { get; set; } - public static List AllDaysOfWeek() => new() - { - DayOfWeek.Monday, - DayOfWeek.Tuesday, - DayOfWeek.Wednesday, - DayOfWeek.Thursday, - DayOfWeek.Friday, - DayOfWeek.Saturday, - DayOfWeek.Sunday - }; - - public static List AllDaysOfMonth() => Enumerable.Range(1, 31).ToList(); - public static List AllMonthsOfYear() => Enumerable.Range(1, 12).ToList(); + // placeholder data; migration will be added later + public bool LimitToDateRange => false; + public int StartMonth => 0; + public int StartDay => 0; + public int EndMonth => 0; + public int EndDay => 0; } diff --git a/ErsatzTV.Core/Domain/Scheduling/IAlternateScheduleItem.cs b/ErsatzTV.Core/Domain/Scheduling/IAlternateScheduleItem.cs new file mode 100644 index 000000000..96641268b --- /dev/null +++ b/ErsatzTV.Core/Domain/Scheduling/IAlternateScheduleItem.cs @@ -0,0 +1,14 @@ +namespace ErsatzTV.Core.Domain.Scheduling; + +public interface IAlternateScheduleItem +{ + int Index { get; } + ICollection DaysOfWeek { get; } + ICollection DaysOfMonth { get; } + ICollection MonthsOfYear { get; } + bool LimitToDateRange { get; } + int StartMonth { get; } + int StartDay { get; } + int EndMonth { get; } + int EndDay { get; } +} diff --git a/ErsatzTV.Core/Domain/Scheduling/PlayoutTemplate.cs b/ErsatzTV.Core/Domain/Scheduling/PlayoutTemplate.cs index e9c040dae..dfa467bb0 100644 --- a/ErsatzTV.Core/Domain/Scheduling/PlayoutTemplate.cs +++ b/ErsatzTV.Core/Domain/Scheduling/PlayoutTemplate.cs @@ -1,6 +1,6 @@ namespace ErsatzTV.Core.Domain.Scheduling; -public class PlayoutTemplate +public class PlayoutTemplate : IAlternateScheduleItem { public int Id { get; set; } public int PlayoutId { get; set; } @@ -21,18 +21,4 @@ public class PlayoutTemplate public DateTime DateUpdated { get; set; } //public ICollection AdditionalDays { get; set; } - - public static List AllDaysOfWeek() => - [ - DayOfWeek.Monday, - DayOfWeek.Tuesday, - DayOfWeek.Wednesday, - DayOfWeek.Thursday, - DayOfWeek.Friday, - DayOfWeek.Saturday, - DayOfWeek.Sunday - ]; - - public static List AllDaysOfMonth() => Enumerable.Range(1, 31).ToList(); - public static List AllMonthsOfYear() => Enumerable.Range(1, 12).ToList(); } diff --git a/ErsatzTV.Core/FFmpeg/DecoSelector.cs b/ErsatzTV.Core/FFmpeg/DecoSelector.cs index abaef4aa2..8cde0dfec 100644 --- a/ErsatzTV.Core/FFmpeg/DecoSelector.cs +++ b/ErsatzTV.Core/FFmpeg/DecoSelector.cs @@ -21,7 +21,7 @@ public class DecoSelector(ILogger logger) : IDecoSelector Option maybeTemplateDeco = Option.None; Option maybeActiveTemplate = - PlayoutTemplateSelector.GetPlayoutTemplateFor(playout.Templates, now); + AlternateScheduleSelector.GetScheduleForDate(playout.Templates, now); foreach (PlayoutTemplate activeTemplate in maybeActiveTemplate) { diff --git a/ErsatzTV.Core/Scheduling/PlayoutTemplateSelector.cs b/ErsatzTV.Core/Scheduling/AlternateScheduleSelector.cs similarity index 53% rename from ErsatzTV.Core/Scheduling/PlayoutTemplateSelector.cs rename to ErsatzTV.Core/Scheduling/AlternateScheduleSelector.cs index ce83f268a..de07aece9 100644 --- a/ErsatzTV.Core/Scheduling/PlayoutTemplateSelector.cs +++ b/ErsatzTV.Core/Scheduling/AlternateScheduleSelector.cs @@ -2,18 +2,32 @@ using ErsatzTV.Core.Domain.Scheduling; namespace ErsatzTV.Core.Scheduling; -public static class PlayoutTemplateSelector +public class AlternateScheduleSelector { - public static Option GetPlayoutTemplateFor( - IEnumerable templates, - DateTimeOffset date) + public static List AllDaysOfWeek() => + [ + DayOfWeek.Monday, + DayOfWeek.Tuesday, + DayOfWeek.Wednesday, + DayOfWeek.Thursday, + DayOfWeek.Friday, + DayOfWeek.Saturday, + DayOfWeek.Sunday + ]; + + public static List AllDaysOfMonth() => Enumerable.Range(1, 31).ToList(); + + public static List AllMonthsOfYear() => Enumerable.Range(1, 12).ToList(); + + public static Option GetScheduleForDate(IEnumerable items, DateTimeOffset date) + where T : IAlternateScheduleItem { - foreach (PlayoutTemplate template in templates.OrderBy(x => x.Index)) + foreach (T item in items.OrderBy(x => x.Index)) { - if (template.LimitToDateRange) + if (item.LimitToDateRange) { - bool reverse = template.StartMonth * 100 + template.StartDay > - template.EndMonth * 100 + template.EndDay; + bool reverse = item.StartMonth * 100 + item.StartDay > + item.EndMonth * 100 + item.EndDay; int year = date.LocalDateTime.Year; DateTime start; @@ -21,18 +35,18 @@ public static class PlayoutTemplateSelector try { - start = new DateTime(year, template.StartMonth, template.StartDay, 0, 0, 0, DateTimeKind.Local); + start = new DateTime(year, item.StartMonth, item.StartDay, 0, 0, 0, DateTimeKind.Local); } catch (ArgumentOutOfRangeException) { // this should only happen with days that are greater than the actual days in the month, // so roll over to the 1st of the next month - start = new DateTime(year, template.StartMonth + 1, 1, 0, 0, 0, DateTimeKind.Local); + start = new DateTime(year, item.StartMonth + 1, 1, 0, 0, 0, DateTimeKind.Local); } try { - end = new DateTime(year, template.EndMonth, template.EndDay, 0, 0, 0, DateTimeKind.Local); + end = new DateTime(year, item.EndMonth, item.EndDay, 0, 0, 0, DateTimeKind.Local); } catch (ArgumentOutOfRangeException) { @@ -40,8 +54,8 @@ public static class PlayoutTemplateSelector // so reduce to the max days in the month end = new DateTime( year, - template.EndMonth, - DateTime.DaysInMonth(year, template.EndMonth), + item.EndMonth, + DateTime.DaysInMonth(year, item.EndMonth), 0, 0, 0, @@ -62,25 +76,25 @@ public static class PlayoutTemplateSelector } } - bool daysOfWeek = template.DaysOfWeek.Contains(date.DayOfWeek); + bool daysOfWeek = item.DaysOfWeek.Contains(date.DayOfWeek); if (!daysOfWeek) { continue; } - bool daysOfMonth = template.DaysOfMonth.Contains(date.Day); + bool daysOfMonth = item.DaysOfMonth.Contains(date.Day); if (!daysOfMonth) { continue; } - bool monthOfYear = template.MonthsOfYear.Contains(date.Month); + bool monthOfYear = item.MonthsOfYear.Contains(date.Month); if (monthOfYear) { - return template; + return item; } } - return Option.None; + return Option.None; } } diff --git a/ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutFillerBuilder.cs b/ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutFillerBuilder.cs index 65cc6be8c..48a151a48 100644 --- a/ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutFillerBuilder.cs +++ b/ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutFillerBuilder.cs @@ -483,7 +483,7 @@ public class BlockPlayoutFillerBuilder( private static Option GetDecoFor(PlayoutReferenceData referenceData, DateTimeOffset start) { Option maybeTemplate = - PlayoutTemplateSelector.GetPlayoutTemplateFor(referenceData.PlayoutTemplates, start); + AlternateScheduleSelector.GetScheduleForDate(referenceData.PlayoutTemplates, start); foreach (PlayoutTemplate template in maybeTemplate) { if (template.DecoTemplate is not null) diff --git a/ErsatzTV.Core/Scheduling/BlockScheduling/EffectiveBlock.cs b/ErsatzTV.Core/Scheduling/BlockScheduling/EffectiveBlock.cs index 022fb97d0..0b2997df1 100644 --- a/ErsatzTV.Core/Scheduling/BlockScheduling/EffectiveBlock.cs +++ b/ErsatzTV.Core/Scheduling/BlockScheduling/EffectiveBlock.cs @@ -16,7 +16,7 @@ internal record EffectiveBlock(Block Block, BlockKey BlockKey, DateTimeOffset St DateTimeOffset current = new DateTimeOffset(start.Year, start.Month, start.Day, 0, 0, 0, start.Offset); while (current < finish) { - Option maybeTemplate = PlayoutTemplateSelector.GetPlayoutTemplateFor(templates, current); + Option maybeTemplate = AlternateScheduleSelector.GetScheduleForDate(templates, current); foreach (PlayoutTemplate playoutTemplate in maybeTemplate) { // logger.LogDebug( diff --git a/ErsatzTV.Core/Scheduling/PlayoutBuilder.cs b/ErsatzTV.Core/Scheduling/PlayoutBuilder.cs index 99e2bd092..8ac592b8b 100644 --- a/ErsatzTV.Core/Scheduling/PlayoutBuilder.cs +++ b/ErsatzTV.Core/Scheduling/PlayoutBuilder.cs @@ -570,10 +570,9 @@ public class PlayoutBuilder : IPlayoutBuilder { var random = new Random(playout.Seed); - ProgramSchedule activeSchedule = PlayoutScheduleSelector.GetProgramScheduleFor( - referenceData.ProgramSchedule, - referenceData.ProgramScheduleAlternates, - playoutStart); + ProgramSchedule activeSchedule = AlternateScheduleSelector + .GetScheduleForDate(referenceData.ProgramScheduleAlternates, playoutStart) + .Match(s => s.ProgramSchedule, referenceData.ProgramSchedule); if (activeSchedule.Items.Count == 0) { @@ -959,10 +958,9 @@ public class PlayoutBuilder : IPlayoutBuilder } } - ProgramSchedule activeScheduleAtAnchor = PlayoutScheduleSelector.GetProgramScheduleFor( - referenceData.ProgramSchedule, - referenceData.ProgramScheduleAlternates, - playoutBuilderState.CurrentTime); + ProgramSchedule activeScheduleAtAnchor = AlternateScheduleSelector + .GetScheduleForDate(referenceData.ProgramScheduleAlternates, playoutBuilderState.CurrentTime) + .Match(s => s.ProgramSchedule, referenceData.ProgramSchedule); // if we ended in a different alternate schedule, fix the anchor data if (playoutBuilderState.CurrentTime >= playoutFinish && activeScheduleAtAnchor.Id != activeSchedule.Id && diff --git a/ErsatzTV.Core/Scheduling/PlayoutScheduleSelector.cs b/ErsatzTV.Core/Scheduling/PlayoutScheduleSelector.cs deleted file mode 100644 index eb59a4eb5..000000000 --- a/ErsatzTV.Core/Scheduling/PlayoutScheduleSelector.cs +++ /dev/null @@ -1,40 +0,0 @@ -using ErsatzTV.Core.Domain; - -namespace ErsatzTV.Core.Scheduling; - -public static class PlayoutScheduleSelector -{ - public static ProgramSchedule GetProgramScheduleFor( - ProgramSchedule defaultSchedule, - IEnumerable alternates, - DateTimeOffset date) - { - foreach (ProgramScheduleAlternate alternate in alternates.OrderBy(x => x.Index)) - { - bool daysOfWeek = alternate.DaysOfWeek.Count is 0 or 7 || - alternate.DaysOfWeek.Contains(date.DayOfWeek); - - if (!daysOfWeek) - { - continue; - } - - bool daysOfMonth = alternate.DaysOfMonth.Count is 0 or 31 || - alternate.DaysOfMonth.Contains(date.Day); - if (!daysOfMonth) - { - continue; - } - - bool monthOfYear = alternate.MonthsOfYear.Count is 0 or 12 || - alternate.MonthsOfYear.Contains(date.Month); - - if (monthOfYear) - { - return alternate.ProgramSchedule; - } - } - - return defaultSchedule; - } -} diff --git a/ErsatzTV/Pages/PlayoutAlternateSchedulesEditor.razor b/ErsatzTV/Pages/PlayoutAlternateSchedulesEditor.razor index c2dcaf0ef..cdc401c43 100644 --- a/ErsatzTV/Pages/PlayoutAlternateSchedulesEditor.razor +++ b/ErsatzTV/Pages/PlayoutAlternateSchedulesEditor.razor @@ -4,6 +4,7 @@ @using ErsatzTV.Application.Channels @using ErsatzTV.Application.Playouts @using ErsatzTV.Application.ProgramSchedules +@using ErsatzTV.Core.Scheduling @implements IDisposable @inject NavigationManager NavigationManager @inject ILogger Logger @@ -243,9 +244,9 @@ { Index = _items.Map(i => i.Index).DefaultIfEmpty().Max() + 1, ProgramSchedule = _schedules.Head(), - DaysOfWeek = ProgramScheduleAlternate.AllDaysOfWeek(), - DaysOfMonth = ProgramScheduleAlternate.AllDaysOfMonth(), - MonthsOfYear = ProgramScheduleAlternate.AllMonthsOfYear() + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear() }; _items.Add(item); diff --git a/ErsatzTV/Pages/PlayoutTemplatesEditor.razor b/ErsatzTV/Pages/PlayoutTemplatesEditor.razor index a7fe17b85..0acf9e6a8 100644 --- a/ErsatzTV/Pages/PlayoutTemplatesEditor.razor +++ b/ErsatzTV/Pages/PlayoutTemplatesEditor.razor @@ -4,6 +4,7 @@ @using ErsatzTV.Application.Channels @using ErsatzTV.Application.Scheduling @using ErsatzTV.Core.Domain.Scheduling +@using ErsatzTV.Core.Scheduling @implements IDisposable @inject NavigationManager NavigationManager @inject ILogger Logger @@ -385,9 +386,9 @@ var item = new PlayoutTemplateEditViewModel { Index = _items.Map(i => i.Index).DefaultIfEmpty().Max() + 1, - DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), - DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), - MonthsOfYear = PlayoutTemplate.AllMonthsOfYear() + DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), + DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), + MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear() }; _items.Add(item); diff --git a/ErsatzTV/ViewModels/PlayoutTemplateEditViewModel.cs b/ErsatzTV/ViewModels/PlayoutTemplateEditViewModel.cs index c419c5900..7e0cc40d5 100644 --- a/ErsatzTV/ViewModels/PlayoutTemplateEditViewModel.cs +++ b/ErsatzTV/ViewModels/PlayoutTemplateEditViewModel.cs @@ -67,8 +67,8 @@ public class PlayoutTemplateEditViewModel new DateTime(date.Year, date.Month, date.Day, 0, 0, 0, DateTimeKind.Local)); Option result = - PlayoutTemplateSelector.GetPlayoutTemplateFor( - new[] { template }, + AlternateScheduleSelector.GetScheduleForDate( + [template], new DateTimeOffset( date.Year, date.Month,