Browse Source

add "all" instruction (#1821)

* add "all" instruction

* use string for value we don't care about
pull/1822/head
Jason Dove 2 years ago committed by GitHub
parent
commit
6f66909957
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 70
      ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutAllHandler.cs
  2. 6
      ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutAllInstruction.cs
  3. 2
      ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutBuilder.cs

70
ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutAllHandler.cs

@ -0,0 +1,70 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Scheduling;
using ErsatzTV.Core.Scheduling.YamlScheduling.Models;
using Microsoft.Extensions.Logging;
namespace ErsatzTV.Core.Scheduling.YamlScheduling.Handlers;
public class YamlPlayoutAllHandler(EnumeratorCache enumeratorCache) : YamlPlayoutContentHandler(enumeratorCache)
{
public override async Task<bool> Handle(
YamlPlayoutContext context,
YamlPlayoutInstruction instruction,
ILogger<YamlPlayoutBuilder> logger,
CancellationToken cancellationToken)
{
if (instruction is not YamlPlayoutAllInstruction all)
{
return false;
}
Option<IMediaCollectionEnumerator> maybeEnumerator = await GetContentEnumerator(
context,
instruction.Content,
logger,
cancellationToken);
foreach (IMediaCollectionEnumerator enumerator in maybeEnumerator)
{
for (var i = 0; i < enumerator.Count; i++)
{
foreach (MediaItem mediaItem in enumerator.Current)
{
TimeSpan itemDuration = DurationForMediaItem(mediaItem);
// create a playout item
var playoutItem = new PlayoutItem
{
MediaItemId = mediaItem.Id,
Start = context.CurrentTime.UtcDateTime,
Finish = context.CurrentTime.UtcDateTime + itemDuration,
InPoint = TimeSpan.Zero,
OutPoint = itemDuration,
FillerKind = GetFillerKind(all),
//CustomTitle = scheduleItem.CustomTitle,
//WatermarkId = scheduleItem.WatermarkId,
//PreferredAudioLanguageCode = scheduleItem.PreferredAudioLanguageCode,
//PreferredAudioTitle = scheduleItem.PreferredAudioTitle,
//PreferredSubtitleLanguageCode = scheduleItem.PreferredSubtitleLanguageCode,
//SubtitleMode = scheduleItem.SubtitleMode
GuideGroup = context.GuideGroup
//GuideStart = effectiveBlock.Start.UtcDateTime,
//GuideFinish = blockFinish.UtcDateTime,
//BlockKey = JsonConvert.SerializeObject(effectiveBlock.BlockKey),
//CollectionKey = JsonConvert.SerializeObject(collectionKey, JsonSettings),
//CollectionEtag = collectionEtags[collectionKey]
};
context.Playout.Items.Add(playoutItem);
context.CurrentTime += itemDuration;
enumerator.MoveNext();
}
}
return true;
}
return false;
}
}

6
ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutAllInstruction.cs

@ -0,0 +1,6 @@
namespace ErsatzTV.Core.Scheduling.YamlScheduling.Models;
public class YamlPlayoutAllInstruction : YamlPlayoutInstruction
{
public string All { get; set; }
}

2
ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutBuilder.cs

@ -130,6 +130,7 @@ public class YamlPlayoutBuilder(
YamlPlayoutSkipItemsInstruction => new YamlPlayoutSkipItemsHandler(), YamlPlayoutSkipItemsInstruction => new YamlPlayoutSkipItemsHandler(),
// content handlers // content handlers
YamlPlayoutAllInstruction => new YamlPlayoutAllHandler(enumeratorCache),
YamlPlayoutCountInstruction => new YamlPlayoutCountHandler(enumeratorCache), YamlPlayoutCountInstruction => new YamlPlayoutCountHandler(enumeratorCache),
YamlPlayoutDurationInstruction => new YamlPlayoutDurationHandler(enumeratorCache), YamlPlayoutDurationInstruction => new YamlPlayoutDurationHandler(enumeratorCache),
YamlPlayoutPadToNextInstruction => new YamlPlayoutPadToNextHandler(enumeratorCache), YamlPlayoutPadToNextInstruction => new YamlPlayoutPadToNextHandler(enumeratorCache),
@ -164,6 +165,7 @@ public class YamlPlayoutBuilder(
var instructionKeyMappings = new Dictionary<string, Type> var instructionKeyMappings = new Dictionary<string, Type>
{ {
{ "all", typeof(YamlPlayoutAllInstruction) },
{ "count", typeof(YamlPlayoutCountInstruction) }, { "count", typeof(YamlPlayoutCountInstruction) },
{ "duration", typeof(YamlPlayoutDurationInstruction) }, { "duration", typeof(YamlPlayoutDurationInstruction) },
{ "new_epg_group", typeof(YamlPlayoutNewEpgGroupInstruction) }, { "new_epg_group", typeof(YamlPlayoutNewEpgGroupInstruction) },

Loading…
Cancel
Save