marathon playout history fixes (#2096)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user