Browse Source

add yaml playout sequences (#1826)

pull/1827/head
Jason Dove 10 months ago committed by GitHub
parent
commit
59f11f1a1a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutDefinition.cs
  2. 3
      ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutInstruction.cs
  3. 6
      ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutSequenceInstruction.cs
  4. 8
      ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutSequenceItem.cs
  5. 36
      ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutBuilder.cs

2
ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutDefinition.cs

@ -4,6 +4,8 @@ public class YamlPlayoutDefinition @@ -4,6 +4,8 @@ public class YamlPlayoutDefinition
{
public List<YamlPlayoutContentItem> Content { get; set; } = [];
public List<YamlPlayoutSequenceItem> Sequence { get; set; } = [];
public List<YamlPlayoutInstruction> Reset { get; set; } = [];
public List<YamlPlayoutInstruction> Playout { get; set; } = [];

3
ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutInstruction.cs

@ -10,4 +10,7 @@ public class YamlPlayoutInstruction @@ -10,4 +10,7 @@ public class YamlPlayoutInstruction
[YamlMember(Alias = "filler_kind", ApplyNamingConventions = false)]
public string FillerKind { get; set; }
[YamlIgnore]
public string SequenceKey { get; set; }
}

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

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

8
ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutSequenceItem.cs

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
namespace ErsatzTV.Core.Scheduling.YamlScheduling.Models;
public class YamlPlayoutSequenceItem
{
public string Key { get; set; }
public List<YamlPlayoutInstruction> Items { get; set; } = [];
}

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

@ -1,3 +1,4 @@ @@ -1,3 +1,4 @@
using System.Collections.Immutable;
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Metadata;
using ErsatzTV.Core.Interfaces.Repositories;
@ -78,6 +79,8 @@ public class YamlPlayoutBuilder( @@ -78,6 +79,8 @@ public class YamlPlayoutBuilder(
}
}
FlattenSequences(context);
// handle all playout instructions
while (context.CurrentTime < finish)
{
@ -112,6 +115,38 @@ public class YamlPlayoutBuilder( @@ -112,6 +115,38 @@ public class YamlPlayoutBuilder(
.GetValue<int>(ConfigElementKey.PlayoutDaysToBuild)
.IfNoneAsync(2);
private static void FlattenSequences(YamlPlayoutContext context)
{
var rawInstructions = context.Definition.Playout.ToImmutableList();
context.Definition.Playout.Clear();
foreach (YamlPlayoutInstruction instruction in rawInstructions)
{
switch (instruction)
{
case YamlPlayoutSequenceInstruction sequenceInstruction:
IEnumerable<YamlPlayoutInstruction> sequenceInstructions = context.Definition.Sequence
.Filter(s => s.Key == sequenceInstruction.Sequence)
.HeadOrNone()
.Map(s => s.Items)
.Flatten();
// insert all instructions from the sequence
foreach (YamlPlayoutInstruction i in sequenceInstructions)
{
// maybe used for shuffling later?
i.SequenceKey = sequenceInstruction.Sequence;
context.Definition.Playout.Add(i);
}
break;
default:
context.Definition.Playout.Add(instruction);
break;
}
}
}
private static Option<IYamlPlayoutHandler> GetHandlerForInstruction(
Dictionary<YamlPlayoutInstruction, IYamlPlayoutHandler> handlers,
EnumeratorCache enumeratorCache,
@ -171,6 +206,7 @@ public class YamlPlayoutBuilder( @@ -171,6 +206,7 @@ public class YamlPlayoutBuilder(
{ "new_epg_group", typeof(YamlPlayoutNewEpgGroupInstruction) },
{ "pad_to_next", typeof(YamlPlayoutPadToNextInstruction) },
{ "repeat", typeof(YamlPlayoutRepeatInstruction) },
{ "sequence", typeof(YamlPlayoutSequenceInstruction) },
{ "skip_items", typeof(YamlPlayoutSkipItemsInstruction) },
{ "wait_until", typeof(YamlPlayoutWaitUntilInstruction) }
};

Loading…
Cancel
Save