marathon playout history fixes (#2096)

This commit is contained in:
Jason Dove
2025-06-30 21:39:31 +00:00
committed by GitHub
parent 35116c64cd
commit d6bfc2fd05
5 changed files with 37 additions and 13 deletions
+11 -2
View File
@@ -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
}
}
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;
}
@@ -0,0 +1,5 @@
using ErsatzTV.Core.Interfaces.Scheduling;
namespace ErsatzTV.Core.Scheduling;
public record PlaylistEnumeratorCollectionKey(IMediaCollectionEnumerator Enumerator, CollectionKey CollectionKey);
@@ -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,
@@ -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)
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)
h.Details,
childEnumerator,
playbackOrder,
h.IsCurrentChild);
!h.IsCurrentChild);
}
if (h.IsCurrentChild)
@@ -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