mirror of https://github.com/ErsatzTV/ErsatzTV.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.4 KiB
40 lines
1.4 KiB
using ErsatzTV.Core.Domain; |
|
using ErsatzTV.Core.Domain.Scheduling; |
|
using ErsatzTV.Core.Interfaces.FFmpeg; |
|
using ErsatzTV.Core.Scheduling; |
|
using Microsoft.Extensions.Logging; |
|
|
|
namespace ErsatzTV.Core.FFmpeg; |
|
|
|
public class DecoSelector(ILogger<DecoSelector> logger) : IDecoSelector |
|
{ |
|
public DecoEntries GetDecoEntries(Playout playout, DateTimeOffset now) |
|
{ |
|
logger.LogDebug("Checking for deco at {Now}", now); |
|
|
|
if (playout is null) |
|
{ |
|
return new DecoEntries(Option<Deco>.None, Option<Deco>.None); |
|
} |
|
|
|
Option<Deco> maybePlayoutDeco = Optional(playout.Deco); |
|
Option<Deco> maybeTemplateDeco = Option<Deco>.None; |
|
|
|
Option<PlayoutTemplate> maybeActiveTemplate = |
|
PlayoutTemplateSelector.GetPlayoutTemplateFor(playout.Templates, now); |
|
|
|
foreach (PlayoutTemplate activeTemplate in maybeActiveTemplate) |
|
{ |
|
Option<DecoTemplateItem> 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); |
|
} |
|
}
|
|
|