using ErsatzTV.Core.Domain; using ErsatzTV.Core.Domain.Scheduling; using ErsatzTV.Core.Interfaces.FFmpeg; using ErsatzTV.Core.Scheduling; namespace ErsatzTV.Core.FFmpeg; public class DecoSelector : IDecoSelector { public DecoEntries GetDecoEntries(Playout playout, DateTimeOffset now) { //logger.LogDebug("Checking for deco at {Now}", now); if (playout is null) { return new DecoEntries(Option.None, Option.None); } Option maybePlayoutDeco = Optional(playout.Deco); Option maybeTemplateDeco = Option.None; Option maybeActiveTemplate = AlternateScheduleSelector.GetScheduleForDate(playout.Templates, now); foreach (PlayoutTemplate activeTemplate in maybeActiveTemplate) { Option maybeItem = Optional(activeTemplate.DecoTemplate) .SelectMany(dt => dt.Items) .Find(i => i.StartTime <= now.TimeOfDay && (i.EndTime == TimeSpan.Zero || i.EndTime > now.TimeOfDay)); foreach (DecoTemplateItem item in maybeItem) { //logger.LogDebug("Selecting deco between {Start} and {End}", item.StartTime, item.EndTime); maybeTemplateDeco = Optional(item.Deco); } } return new DecoEntries(maybeTemplateDeco, maybePlayoutDeco); } }