Browse Source

marathon playout history fixes (#2096)

pull/2097/head
Jason Dove 2 months ago committed by GitHub
parent
commit
d6bfc2fd05
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 13
      ErsatzTV.Core/Scheduling/PlaylistEnumerator.cs
  2. 5
      ErsatzTV.Core/Scheduling/PlaylistEnumeratorCollectionKey.cs
  3. 7
      ErsatzTV.Core/Scheduling/YamlScheduling/EnumeratorCache.cs
  4. 19
      ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutApplyHistoryHandler.cs
  5. 6
      ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutContentHandler.cs

13
ErsatzTV.Core/Scheduling/PlaylistEnumerator.cs

@ -78,7 +78,7 @@ public class PlaylistEnumerator : IMediaCollectionEnumerator @@ -78,7 +78,7 @@ public class PlaylistEnumerator : IMediaCollectionEnumerator
}
}
public ImmutableDictionary<CollectionKey, IMediaCollectionEnumerator> ChildEnumerators { get; private set; }
public ImmutableList<PlaylistEnumeratorCollectionKey> ChildEnumerators { get; private set; }
public int EnumeratorIndex => _enumeratorIndex;
@ -213,7 +213,16 @@ public class PlaylistEnumerator : IMediaCollectionEnumerator @@ -213,7 +213,16 @@ public class PlaylistEnumerator : IMediaCollectionEnumerator
}
}
result.ChildEnumerators = enumeratorMap.ToImmutableDictionary();
var childEnumerators = new List<PlaylistEnumeratorCollectionKey>();
foreach (IMediaCollectionEnumerator enumerator in result._sortedEnumerators)
{
foreach ((CollectionKey collectionKey, _) in enumeratorMap.Find(e => e.Value == enumerator))
{
childEnumerators.Add(new PlaylistEnumeratorCollectionKey(enumerator, collectionKey));
}
}
result.ChildEnumerators = childEnumerators.ToImmutableList();
return result;
}

5
ErsatzTV.Core/Scheduling/PlaylistEnumeratorCollectionKey.cs

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
using ErsatzTV.Core.Interfaces.Scheduling;
namespace ErsatzTV.Core.Scheduling;
public record PlaylistEnumeratorCollectionKey(IMediaCollectionEnumerator Enumerator, CollectionKey CollectionKey);

7
ErsatzTV.Core/Scheduling/YamlScheduling/EnumeratorCache.cs

@ -123,6 +123,13 @@ public class EnumeratorCache(IMediaCollectionRepository mediaCollectionRepositor @@ -123,6 +123,13 @@ public class EnumeratorCache(IMediaCollectionRepository mediaCollectionRepositor
Dictionary<PlaylistItem, List<MediaItem>> itemMap =
await mediaCollectionRepository.GetPlaylistItemMap(playlist.PlaylistGroup, playlist.Playlist);
// foreach ((PlaylistItem playlistItem, List<MediaItem> mediaItems) in itemMap)
// {
// _playlistMediaItems.Add(
// new PlaylistKey(contentKey, CollectionKey.ForPlaylistItem(playlistItem)),
// mediaItems);
// }
return await PlaylistEnumerator.Create(
mediaCollectionRepository,
itemMap,

19
ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutApplyHistoryHandler.cs

@ -68,9 +68,8 @@ public class YamlPlayoutApplyHistoryHandler(EnumeratorCache enumeratorCache) @@ -68,9 +68,8 @@ public class YamlPlayoutApplyHistoryHandler(EnumeratorCache enumeratorCache)
itemPlaybackOrder = PlaybackOrder.None;
}
var childEnumeratorKeys = playlistEnumerator.ChildEnumerators.Keys.ToList();
foreach ((CollectionKey collectionKey, IMediaCollectionEnumerator childEnumerator) in
playlistEnumerator.ChildEnumerators)
var childEnumeratorKeys = playlistEnumerator.ChildEnumerators.Map(x => x.CollectionKey).ToList();
foreach ((IMediaCollectionEnumerator childEnumerator, CollectionKey collectionKey) in playlistEnumerator.ChildEnumerators)
{
Option<PlayoutHistory> maybeApplicableHistory = maybeHistory
.Filter(h => h.ChildKey == HistoryDetails.KeyForCollectionKey(collectionKey))
@ -82,13 +81,17 @@ public class YamlPlayoutApplyHistoryHandler(EnumeratorCache enumeratorCache) @@ -82,13 +81,17 @@ public class YamlPlayoutApplyHistoryHandler(EnumeratorCache enumeratorCache)
foreach (PlayoutHistory h in maybeApplicableHistory)
{
// logger.LogDebug(
// "History is applicable: {When}: {ChildKey} / {History}",
// "History is applicable: {When}: {ChildKey} / {History} / {IsCurrentChild}",
// h.When,
// h.ChildKey,
// h.Details);
// h.Details,
// h.IsCurrentChild);
enumerator.ResetState(
new CollectionEnumeratorState { Seed = enumerator.State.Seed, Index = h.Index + 1 });
enumerator.ResetState(new CollectionEnumeratorState
{
Seed = enumerator.State.Seed,
Index = h.Index + (h.IsCurrentChild ? 1 : 0)
});
if (itemPlaybackOrder is PlaybackOrder.Chronological)
{
@ -97,7 +100,7 @@ public class YamlPlayoutApplyHistoryHandler(EnumeratorCache enumeratorCache) @@ -97,7 +100,7 @@ public class YamlPlayoutApplyHistoryHandler(EnumeratorCache enumeratorCache)
h.Details,
childEnumerator,
playbackOrder,
h.IsCurrentChild);
!h.IsCurrentChild);
}
if (h.IsCurrentChild)

6
ErsatzTV.Core/Scheduling/YamlScheduling/Handlers/YamlPlayoutContentHandler.cs

@ -91,10 +91,10 @@ public abstract class YamlPlayoutContentHandler(EnumeratorCache enumeratorCache) @@ -91,10 +91,10 @@ public abstract class YamlPlayoutContentHandler(EnumeratorCache enumeratorCache)
result.Add(nextHistory);
var childEnumeratorKeys = playlistEnumerator.ChildEnumerators.Keys.ToList();
foreach ((CollectionKey collectionKey, IMediaCollectionEnumerator childEnumerator) in playlistEnumerator.ChildEnumerators)
for (var i = 0; i < playlistEnumerator.ChildEnumerators.Count; i++)
{
bool isCurrentChild = childEnumeratorKeys.IndexOf(collectionKey) == playlistEnumerator.EnumeratorIndex;
(IMediaCollectionEnumerator childEnumerator, CollectionKey collectionKey) = playlistEnumerator.ChildEnumerators[i];
bool isCurrentChild = i == playlistEnumerator.EnumeratorIndex;
foreach (MediaItem currentMediaItem in childEnumerator.Current)
{
// create a playout history record

Loading…
Cancel
Save