Browse Source

add new_epg_group instruction; add filler_kind propery (#1819)

pull/1820/head
Jason Dove 11 months ago committed by GitHub
parent
commit
f06ef5262a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      ErsatzTV.Application/Channels/Commands/RefreshChannelDataHandler.cs
  2. 13
      ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutBuilder.cs
  3. 5
      ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutInstruction.cs
  4. 9
      ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutNewEpgGroupInstruction.cs
  5. 13
      ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutScheduler.cs
  6. 6
      ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutSchedulerCount.cs
  7. 9
      ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutSchedulerDuration.cs
  8. 3
      ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutSchedulerPadToNext.cs

1
ErsatzTV.Application/Channels/Commands/RefreshChannelDataHandler.cs

@ -182,6 +182,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData> @@ -182,6 +182,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
switch (playout.ProgramSchedulePlayoutType)
{
case ProgramSchedulePlayoutType.Flood:
case ProgramSchedulePlayoutType.Yaml:
var floodSorted = playouts
.Collect(p => p.Items)
.OrderBy(pi => pi.Start)

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

@ -44,6 +44,7 @@ public class YamlPlayoutBuilder( @@ -44,6 +44,7 @@ public class YamlPlayoutBuilder(
System.Collections.Generic.HashSet<string> missingContentKeys = [];
int itemsAfterRepeat = playout.Items.Count;
int guideGroup = 1;
var index = 0;
while (currentTime < finish)
{
@ -60,7 +61,8 @@ public class YamlPlayoutBuilder( @@ -60,7 +61,8 @@ public class YamlPlayoutBuilder(
{
case YamlPlayoutWaitUntilInstruction waitUntil:
currentTime = HandleWaitUntil(currentTime, waitUntil);
break;
index++;
continue;
case YamlPlayoutRepeatInstruction:
// repeat resets index into YAML playout
index = 0;
@ -72,6 +74,10 @@ public class YamlPlayoutBuilder( @@ -72,6 +74,10 @@ public class YamlPlayoutBuilder(
itemsAfterRepeat = playout.Items.Count;
continue;
case YamlPlayoutNewEpgGroupInstruction:
guideGroup *= -1;
index++;
continue;
}
Option<IMediaCollectionEnumerator> maybeEnumerator = await GetCachedEnumeratorForContent(
@ -96,7 +102,7 @@ public class YamlPlayoutBuilder( @@ -96,7 +102,7 @@ public class YamlPlayoutBuilder(
switch (playoutItem)
{
case YamlPlayoutCountInstruction count:
currentTime = YamlPlayoutSchedulerCount.Schedule(playout, currentTime, count, enumerator);
currentTime = YamlPlayoutSchedulerCount.Schedule(playout, currentTime, guideGroup, count, enumerator);
break;
case YamlPlayoutDurationInstruction duration:
Option<IMediaCollectionEnumerator> durationFallbackEnumerator = await GetCachedEnumeratorForContent(
@ -109,6 +115,7 @@ public class YamlPlayoutBuilder( @@ -109,6 +115,7 @@ public class YamlPlayoutBuilder(
currentTime = YamlPlayoutSchedulerDuration.Schedule(
playout,
currentTime,
guideGroup,
duration,
enumerator,
durationFallbackEnumerator);
@ -124,6 +131,7 @@ public class YamlPlayoutBuilder( @@ -124,6 +131,7 @@ public class YamlPlayoutBuilder(
currentTime = YamlPlayoutSchedulerPadToNext.Schedule(
playout,
currentTime,
guideGroup,
padToNext,
enumerator,
fallbackEnumerator);
@ -307,6 +315,7 @@ public class YamlPlayoutBuilder( @@ -307,6 +315,7 @@ public class YamlPlayoutBuilder(
{
{ "count", typeof(YamlPlayoutCountInstruction) },
{ "duration", typeof(YamlPlayoutDurationInstruction) },
{ "new_epg_group", typeof(YamlPlayoutNewEpgGroupInstruction) },
{ "pad_to_next", typeof(YamlPlayoutPadToNextInstruction) },
{ "repeat", typeof(YamlPlayoutRepeatInstruction) },
{ "skip_items", typeof(YamlPlayoutSkipItemsInstruction) },

5
ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutInstruction.cs

@ -1,6 +1,11 @@ @@ -1,6 +1,11 @@
using YamlDotNet.Serialization;
namespace ErsatzTV.Core.Scheduling.YamlScheduling;
public class YamlPlayoutInstruction
{
public string Content { get; set; }
[YamlMember(Alias = "filler_kind", ApplyNamingConventions = false)]
public string FillerKind { get; set; }
}

9
ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutNewEpgGroupInstruction.cs

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
using YamlDotNet.Serialization;
namespace ErsatzTV.Core.Scheduling.YamlScheduling;
public class YamlPlayoutNewEpgGroupInstruction : YamlPlayoutInstruction
{
[YamlMember(Alias = "new_epg_group", ApplyNamingConventions = false)]
public string NewEpgGroup { get; set; }
}

13
ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutScheduler.cs

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Domain.Filler;
using ErsatzTV.Core.Extensions;
namespace ErsatzTV.Core.Scheduling.YamlScheduling;
@ -15,4 +16,16 @@ public abstract class YamlPlayoutScheduler @@ -15,4 +16,16 @@ public abstract class YamlPlayoutScheduler
MediaVersion version = mediaItem.GetHeadVersion();
return version.Duration;
}
protected static FillerKind GetFillerKind(YamlPlayoutInstruction instruction)
{
if (string.IsNullOrWhiteSpace(instruction.FillerKind))
{
return FillerKind.None;
}
return Enum.TryParse(instruction.FillerKind, ignoreCase: true, out FillerKind result)
? result
: FillerKind.None;
}
}

6
ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutSchedulerCount.cs

@ -1,5 +1,4 @@ @@ -1,5 +1,4 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Domain.Filler;
using ErsatzTV.Core.Interfaces.Scheduling;
namespace ErsatzTV.Core.Scheduling.YamlScheduling;
@ -9,6 +8,7 @@ public class YamlPlayoutSchedulerCount : YamlPlayoutScheduler @@ -9,6 +8,7 @@ public class YamlPlayoutSchedulerCount : YamlPlayoutScheduler
public static DateTimeOffset Schedule(
Playout playout,
DateTimeOffset currentTime,
int guideGroup,
YamlPlayoutCountInstruction count,
IMediaCollectionEnumerator enumerator)
{
@ -26,14 +26,14 @@ public class YamlPlayoutSchedulerCount : YamlPlayoutScheduler @@ -26,14 +26,14 @@ public class YamlPlayoutSchedulerCount : YamlPlayoutScheduler
Finish = currentTime.UtcDateTime + itemDuration,
InPoint = TimeSpan.Zero,
OutPoint = itemDuration,
FillerKind = FillerKind.None, //blockItem.IncludeInProgramGuide ? FillerKind.None : FillerKind.GuideMode,
FillerKind = GetFillerKind(count),
//CustomTitle = scheduleItem.CustomTitle,
//WatermarkId = scheduleItem.WatermarkId,
//PreferredAudioLanguageCode = scheduleItem.PreferredAudioLanguageCode,
//PreferredAudioTitle = scheduleItem.PreferredAudioTitle,
//PreferredSubtitleLanguageCode = scheduleItem.PreferredSubtitleLanguageCode,
//SubtitleMode = scheduleItem.SubtitleMode
//GuideGroup = effectiveBlock.TemplateItemId,
GuideGroup = guideGroup
//GuideStart = effectiveBlock.Start.UtcDateTime,
//GuideFinish = blockFinish.UtcDateTime,
//BlockKey = JsonConvert.SerializeObject(effectiveBlock.BlockKey),

9
ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutSchedulerDuration.cs

@ -10,6 +10,7 @@ public class YamlPlayoutSchedulerDuration : YamlPlayoutScheduler @@ -10,6 +10,7 @@ public class YamlPlayoutSchedulerDuration : YamlPlayoutScheduler
public static DateTimeOffset Schedule(
Playout playout,
DateTimeOffset currentTime,
int guideGroup,
YamlPlayoutDurationInstruction duration,
IMediaCollectionEnumerator enumerator,
Option<IMediaCollectionEnumerator> fallbackEnumerator)
@ -28,6 +29,8 @@ public class YamlPlayoutSchedulerDuration : YamlPlayoutScheduler @@ -28,6 +29,8 @@ public class YamlPlayoutSchedulerDuration : YamlPlayoutScheduler
targetTime,
duration.DiscardAttempts,
duration.Trim,
GetFillerKind(duration),
guideGroup,
enumerator,
fallbackEnumerator);
}
@ -38,6 +41,8 @@ public class YamlPlayoutSchedulerDuration : YamlPlayoutScheduler @@ -38,6 +41,8 @@ public class YamlPlayoutSchedulerDuration : YamlPlayoutScheduler
DateTimeOffset targetTime,
int discardAttempts,
bool trim,
FillerKind fillerKind,
int guideGroup,
IMediaCollectionEnumerator enumerator,
Option<IMediaCollectionEnumerator> fallbackEnumerator)
{
@ -56,8 +61,8 @@ public class YamlPlayoutSchedulerDuration : YamlPlayoutScheduler @@ -56,8 +61,8 @@ public class YamlPlayoutSchedulerDuration : YamlPlayoutScheduler
Finish = currentTime.UtcDateTime + itemDuration,
InPoint = TimeSpan.Zero,
OutPoint = itemDuration,
//GuideGroup = playoutBuilderState.NextGuideGroup,
//FillerKind = fillerKind,
GuideGroup = guideGroup,
FillerKind = fillerKind
//DisableWatermarks = !allowWatermarks
};

3
ErsatzTV.Core/Scheduling/YamlScheduling/YamlPlayoutSchedulerPadToNext.cs

@ -8,6 +8,7 @@ public class YamlPlayoutSchedulerPadToNext : YamlPlayoutSchedulerDuration @@ -8,6 +8,7 @@ public class YamlPlayoutSchedulerPadToNext : YamlPlayoutSchedulerDuration
public static DateTimeOffset Schedule(
Playout playout,
DateTimeOffset currentTime,
int guideGroup,
YamlPlayoutPadToNextInstruction padToNext,
IMediaCollectionEnumerator enumerator,
Option<IMediaCollectionEnumerator> fallbackEnumerator)
@ -38,6 +39,8 @@ public class YamlPlayoutSchedulerPadToNext : YamlPlayoutSchedulerDuration @@ -38,6 +39,8 @@ public class YamlPlayoutSchedulerPadToNext : YamlPlayoutSchedulerDuration
targetTime,
padToNext.DiscardAttempts,
padToNext.Trim,
GetFillerKind(padToNext),
guideGroup,
enumerator,
fallbackEnumerator);
}

Loading…
Cancel
Save