Browse Source

refactor classic and block schedules to use same alternate schedule selector

pull/2757/head
Jason Dove 7 months ago
parent
commit
7935cc1841
No known key found for this signature in database
  1. 14
      ErsatzTV.Application/Playouts/Commands/ReplacePlayoutAlternateScheduleItemsHandler.cs
  2. 18
      ErsatzTV.Application/Playouts/Queries/GetPlayoutAlternateSchedulesHandler.cs
  3. 6
      ErsatzTV.Application/Scheduling/Commands/PreviewBlockPlayoutHandler.cs
  4. 13
      ErsatzTV.Core.Tests/FFmpeg/DecoSelectorTests.cs
  5. 55
      ErsatzTV.Core.Tests/FFmpeg/GraphicsElementSelectorTests.cs
  6. 55
      ErsatzTV.Core.Tests/FFmpeg/WatermarkSelectorTests.cs
  7. 148
      ErsatzTV.Core.Tests/Scheduling/AlternateScheduleSelectorTests.cs
  8. 24
      ErsatzTV.Core.Tests/Scheduling/BlockScheduling/BlockPlayoutBuilderTests.cs
  9. 21
      ErsatzTV.Core.Tests/Scheduling/BlockScheduling/EffectiveBlockTests.cs
  10. 23
      ErsatzTV.Core/Domain/ProgramScheduleAlternate.cs
  11. 14
      ErsatzTV.Core/Domain/Scheduling/IAlternateScheduleItem.cs
  12. 16
      ErsatzTV.Core/Domain/Scheduling/PlayoutTemplate.cs
  13. 2
      ErsatzTV.Core/FFmpeg/DecoSelector.cs
  14. 50
      ErsatzTV.Core/Scheduling/AlternateScheduleSelector.cs
  15. 2
      ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutFillerBuilder.cs
  16. 2
      ErsatzTV.Core/Scheduling/BlockScheduling/EffectiveBlock.cs
  17. 14
      ErsatzTV.Core/Scheduling/PlayoutBuilder.cs
  18. 40
      ErsatzTV.Core/Scheduling/PlayoutScheduleSelector.cs
  19. 7
      ErsatzTV/Pages/PlayoutAlternateSchedulesEditor.razor
  20. 7
      ErsatzTV/Pages/PlayoutTemplatesEditor.razor
  21. 4
      ErsatzTV/ViewModels/PlayoutTemplateEditViewModel.cs

14
ErsatzTV.Application/Playouts/Commands/ReplacePlayoutAlternateScheduleItemsHandler.cs

@ -62,10 +62,9 @@ public class ReplacePlayoutAlternateScheduleItemsHandler : @@ -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 : @@ -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)

18
ErsatzTV.Application/Playouts/Queries/GetPlayoutAlternateSchedulesHandler.cs

@ -1,4 +1,5 @@ @@ -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; @@ -6,27 +7,24 @@ using static ErsatzTV.Application.Playouts.Mapper;
namespace ErsatzTV.Application.Playouts;
public class GetPlayoutAlternateSchedulesHandler :
public class GetPlayoutAlternateSchedulesHandler(IDbContextFactory<TvContext> dbContextFactory) :
IRequestHandler<GetPlayoutAlternateSchedules, List<PlayoutAlternateScheduleViewModel>>
{
private readonly IDbContextFactory<TvContext> _dbContextFactory;
public GetPlayoutAlternateSchedulesHandler(IDbContextFactory<TvContext> dbContextFactory) =>
_dbContextFactory = dbContextFactory;
public async Task<List<PlayoutAlternateScheduleViewModel>> Handle(
GetPlayoutAlternateSchedules request,
CancellationToken cancellationToken)
{
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken);
await using TvContext dbContext = await dbContextFactory.CreateDbContextAsync(cancellationToken);
List<PlayoutAlternateScheduleViewModel> result = await dbContext.ProgramScheduleAlternates
.AsNoTracking()
.Filter(psa => psa.PlayoutId == request.PlayoutId)
.Include(psa => psa.ProgramSchedule)
.ToListAsync(cancellationToken)
.Map(list => list.Map(ProjectToViewModel).ToList());
Option<ProgramSchedule> 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 : @@ -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));

6
ErsatzTV.Application/Scheduling/Commands/PreviewBlockPlayoutHandler.cs

@ -49,9 +49,9 @@ public class PreviewBlockPlayoutHandler( @@ -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
}
],

13
ErsatzTV.Core.Tests/FFmpeg/DecoSelectorTests.cs

@ -1,6 +1,7 @@ @@ -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 @@ -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 @@ -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

55
ErsatzTV.Core.Tests/FFmpeg/GraphicsElementSelectorTests.cs

@ -2,6 +2,7 @@ using ErsatzTV.Core.Domain; @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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
}
],

55
ErsatzTV.Core.Tests/FFmpeg/WatermarkSelectorTests.cs

@ -2,6 +2,7 @@ using ErsatzTV.Core.Domain; @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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
}
],

148
ErsatzTV.Core.Tests/Scheduling/PlayoutTemplateSelectorTests.cs → ErsatzTV.Core.Tests/Scheduling/AlternateScheduleSelectorTests.cs

@ -5,10 +5,10 @@ using Shouldly; @@ -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 @@ -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 @@ -27,7 +27,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 15
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 3, 31, 0, 0, 0, Offset));
@ -39,9 +39,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -49,7 +49,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 15
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 4, 1, 0, 0, 0, Offset));
@ -61,9 +61,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -71,7 +71,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 15
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 4, 20, 0, 0, 0, Offset));
@ -83,9 +83,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -93,7 +93,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 15
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 6, 15, 0, 0, 0, Offset));
@ -105,9 +105,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -115,7 +115,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 15
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 6, 16, 0, 0, 0, Offset));
@ -127,9 +127,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -137,7 +137,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 15
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset));
@ -149,9 +149,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -159,7 +159,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 15
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset));
@ -171,9 +171,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -181,7 +181,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 29
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset));
@ -193,9 +193,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -203,7 +203,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 29
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset));
@ -215,9 +215,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -225,7 +225,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 1
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 6, 14, 0, 0, 0, Offset));
@ -237,9 +237,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -247,7 +247,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 1
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 6, 15, 0, 0, 0, Offset));
@ -259,9 +259,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -269,7 +269,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 1
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 7, 20, 0, 0, 0, Offset));
@ -281,9 +281,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -291,7 +291,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 1
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 4, 1, 0, 0, 0, Offset));
@ -303,9 +303,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -313,7 +313,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 1
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 4, 2, 0, 0, 0, Offset));
@ -325,9 +325,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -335,7 +335,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 1
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset));
@ -347,9 +347,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -357,7 +357,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 1
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset));
@ -369,9 +369,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -379,7 +379,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 29
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset));
@ -391,9 +391,9 @@ public static class PlayoutTemplateSelectorTests @@ -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 @@ -401,7 +401,7 @@ public static class PlayoutTemplateSelectorTests
EndDay = 29
};
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor(
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate(
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset));

24
ErsatzTV.Core.Tests/Scheduling/BlockScheduling/BlockPlayoutBuilderTests.cs

@ -87,9 +87,9 @@ public class BlockPlayoutBuilderTests @@ -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 @@ -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 @@ -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 @@ -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

21
ErsatzTV.Core.Tests/Scheduling/BlockScheduling/EffectiveBlockTests.cs

@ -1,4 +1,5 @@ @@ -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 @@ -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 @@ -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 @@ -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 @@ -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
}

23
ErsatzTV.Core/Domain/ProgramScheduleAlternate.cs

@ -1,6 +1,8 @@ @@ -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 @@ -12,17 +14,10 @@ public class ProgramScheduleAlternate
public ICollection<int> DaysOfMonth { get; set; }
public ICollection<int> MonthsOfYear { get; set; }
public static List<DayOfWeek> AllDaysOfWeek() => new()
{
DayOfWeek.Monday,
DayOfWeek.Tuesday,
DayOfWeek.Wednesday,
DayOfWeek.Thursday,
DayOfWeek.Friday,
DayOfWeek.Saturday,
DayOfWeek.Sunday
};
public static List<int> AllDaysOfMonth() => Enumerable.Range(1, 31).ToList();
public static List<int> 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;
}

14
ErsatzTV.Core/Domain/Scheduling/IAlternateScheduleItem.cs

@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
namespace ErsatzTV.Core.Domain.Scheduling;
public interface IAlternateScheduleItem
{
int Index { get; }
ICollection<DayOfWeek> DaysOfWeek { get; }
ICollection<int> DaysOfMonth { get; }
ICollection<int> MonthsOfYear { get; }
bool LimitToDateRange { get; }
int StartMonth { get; }
int StartDay { get; }
int EndMonth { get; }
int EndDay { get; }
}

16
ErsatzTV.Core/Domain/Scheduling/PlayoutTemplate.cs

@ -1,6 +1,6 @@ @@ -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 @@ -21,18 +21,4 @@ public class PlayoutTemplate
public DateTime DateUpdated { get; set; }
//public ICollection<DateTimeOffset> AdditionalDays { get; set; }
public static List<DayOfWeek> AllDaysOfWeek() =>
[
DayOfWeek.Monday,
DayOfWeek.Tuesday,
DayOfWeek.Wednesday,
DayOfWeek.Thursday,
DayOfWeek.Friday,
DayOfWeek.Saturday,
DayOfWeek.Sunday
];
public static List<int> AllDaysOfMonth() => Enumerable.Range(1, 31).ToList();
public static List<int> AllMonthsOfYear() => Enumerable.Range(1, 12).ToList();
}

2
ErsatzTV.Core/FFmpeg/DecoSelector.cs

@ -21,7 +21,7 @@ public class DecoSelector(ILogger<DecoSelector> logger) : IDecoSelector @@ -21,7 +21,7 @@ public class DecoSelector(ILogger<DecoSelector> logger) : IDecoSelector
Option<Deco> maybeTemplateDeco = Option<Deco>.None;
Option<PlayoutTemplate> maybeActiveTemplate =
PlayoutTemplateSelector.GetPlayoutTemplateFor(playout.Templates, now);
AlternateScheduleSelector.GetScheduleForDate(playout.Templates, now);
foreach (PlayoutTemplate activeTemplate in maybeActiveTemplate)
{

50
ErsatzTV.Core/Scheduling/PlayoutTemplateSelector.cs → ErsatzTV.Core/Scheduling/AlternateScheduleSelector.cs

@ -2,18 +2,32 @@ using ErsatzTV.Core.Domain.Scheduling; @@ -2,18 +2,32 @@ using ErsatzTV.Core.Domain.Scheduling;
namespace ErsatzTV.Core.Scheduling;
public static class PlayoutTemplateSelector
public class AlternateScheduleSelector
{
public static Option<PlayoutTemplate> GetPlayoutTemplateFor(
IEnumerable<PlayoutTemplate> templates,
DateTimeOffset date)
public static List<DayOfWeek> AllDaysOfWeek() =>
[
DayOfWeek.Monday,
DayOfWeek.Tuesday,
DayOfWeek.Wednesday,
DayOfWeek.Thursday,
DayOfWeek.Friday,
DayOfWeek.Saturday,
DayOfWeek.Sunday
];
public static List<int> AllDaysOfMonth() => Enumerable.Range(1, 31).ToList();
public static List<int> AllMonthsOfYear() => Enumerable.Range(1, 12).ToList();
public static Option<T> GetScheduleForDate<T>(IEnumerable<T> 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 @@ -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 @@ -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 @@ -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<PlayoutTemplate>.None;
return Option<T>.None;
}
}

2
ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutFillerBuilder.cs

@ -483,7 +483,7 @@ public class BlockPlayoutFillerBuilder( @@ -483,7 +483,7 @@ public class BlockPlayoutFillerBuilder(
private static Option<Deco> GetDecoFor(PlayoutReferenceData referenceData, DateTimeOffset start)
{
Option<PlayoutTemplate> maybeTemplate =
PlayoutTemplateSelector.GetPlayoutTemplateFor(referenceData.PlayoutTemplates, start);
AlternateScheduleSelector.GetScheduleForDate(referenceData.PlayoutTemplates, start);
foreach (PlayoutTemplate template in maybeTemplate)
{
if (template.DecoTemplate is not null)

2
ErsatzTV.Core/Scheduling/BlockScheduling/EffectiveBlock.cs

@ -16,7 +16,7 @@ internal record EffectiveBlock(Block Block, BlockKey BlockKey, DateTimeOffset St @@ -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<PlayoutTemplate> maybeTemplate = PlayoutTemplateSelector.GetPlayoutTemplateFor(templates, current);
Option<PlayoutTemplate> maybeTemplate = AlternateScheduleSelector.GetScheduleForDate(templates, current);
foreach (PlayoutTemplate playoutTemplate in maybeTemplate)
{
// logger.LogDebug(

14
ErsatzTV.Core/Scheduling/PlayoutBuilder.cs

@ -570,10 +570,9 @@ public class PlayoutBuilder : IPlayoutBuilder @@ -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 @@ -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 &&

40
ErsatzTV.Core/Scheduling/PlayoutScheduleSelector.cs

@ -1,40 +0,0 @@ @@ -1,40 +0,0 @@
using ErsatzTV.Core.Domain;
namespace ErsatzTV.Core.Scheduling;
public static class PlayoutScheduleSelector
{
public static ProgramSchedule GetProgramScheduleFor(
ProgramSchedule defaultSchedule,
IEnumerable<ProgramScheduleAlternate> 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;
}
}

7
ErsatzTV/Pages/PlayoutAlternateSchedulesEditor.razor

@ -4,6 +4,7 @@ @@ -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<ScheduleItemsEditor> Logger
@ -243,9 +244,9 @@ @@ -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);

7
ErsatzTV/Pages/PlayoutTemplatesEditor.razor

@ -4,6 +4,7 @@ @@ -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<PlayoutTemplatesEditor> Logger
@ -385,9 +386,9 @@ @@ -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);

4
ErsatzTV/ViewModels/PlayoutTemplateEditViewModel.cs

@ -67,8 +67,8 @@ public class PlayoutTemplateEditViewModel @@ -67,8 +67,8 @@ public class PlayoutTemplateEditViewModel
new DateTime(date.Year, date.Month, date.Day, 0, 0, 0, DateTimeKind.Local));
Option<PlayoutTemplate> result =
PlayoutTemplateSelector.GetPlayoutTemplateFor(
new[] { template },
AlternateScheduleSelector.GetScheduleForDate(
[template],
new DateTimeOffset(
date.Year,
date.Month,

Loading…
Cancel
Save