fix multiple zero when using fill with group (#1535)
This commit is contained in:
@@ -406,7 +406,27 @@ public class PlayoutBuilder : IPlayoutBuilder
|
||||
: new OrderedScheduleItemsEnumerator(activeSchedule.Items, scheduleItemsEnumeratorState);
|
||||
|
||||
var collectionEnumerators = new Dictionary<CollectionKey, IMediaCollectionEnumerator>();
|
||||
|
||||
foreach ((CollectionKey collectionKey, List<MediaItem> mediaItems) in collectionMediaItems)
|
||||
{
|
||||
// use configured playback order for primary collection, shuffle for filler
|
||||
Option<ProgramScheduleItem> maybeScheduleItem = sortedScheduleItems
|
||||
.FirstOrDefault(item => CollectionKey.ForScheduleItem(item) == collectionKey);
|
||||
PlaybackOrder playbackOrder = maybeScheduleItem
|
||||
.Match(item => item.PlaybackOrder, () => PlaybackOrder.Shuffle);
|
||||
IMediaCollectionEnumerator enumerator =
|
||||
await GetMediaCollectionEnumerator(
|
||||
playout,
|
||||
activeSchedule,
|
||||
collectionKey,
|
||||
mediaItems,
|
||||
playbackOrder,
|
||||
randomStartPoint,
|
||||
cancellationToken);
|
||||
collectionEnumerators.Add(collectionKey, enumerator);
|
||||
}
|
||||
|
||||
var collectionItemCount = collectionMediaItems.Map((k, v) => (k, v.Count)).Values.ToDictionary();
|
||||
|
||||
var scheduleItemsFillGroupEnumerators = new Dictionary<int, IScheduleItemsEnumerator>();
|
||||
foreach (ProgramScheduleItem scheduleItem in sortedScheduleItems.Where(si => si.FillWithGroupMode is not FillWithGroupMode.None))
|
||||
{
|
||||
@@ -453,6 +473,9 @@ public class PlayoutBuilder : IPlayoutBuilder
|
||||
cancellationToken);
|
||||
|
||||
collectionEnumerators.Add(key, enumerator);
|
||||
|
||||
// this makes multiple (0) work - since it needs the number of items in the collection
|
||||
collectionItemCount.Add(key, fakeCollection.MediaItems.Count);
|
||||
}
|
||||
|
||||
CollectionEnumeratorState enumeratorState =
|
||||
@@ -476,25 +499,6 @@ public class PlayoutBuilder : IPlayoutBuilder
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ((CollectionKey collectionKey, List<MediaItem> mediaItems) in collectionMediaItems)
|
||||
{
|
||||
// use configured playback order for primary collection, shuffle for filler
|
||||
Option<ProgramScheduleItem> maybeScheduleItem = sortedScheduleItems
|
||||
.FirstOrDefault(item => CollectionKey.ForScheduleItem(item) == collectionKey);
|
||||
PlaybackOrder playbackOrder = maybeScheduleItem
|
||||
.Match(item => item.PlaybackOrder, () => PlaybackOrder.Shuffle);
|
||||
IMediaCollectionEnumerator enumerator =
|
||||
await GetMediaCollectionEnumerator(
|
||||
playout,
|
||||
activeSchedule,
|
||||
collectionKey,
|
||||
mediaItems,
|
||||
playbackOrder,
|
||||
randomStartPoint,
|
||||
cancellationToken);
|
||||
collectionEnumerators.Add(collectionKey, enumerator);
|
||||
}
|
||||
|
||||
// find start anchor
|
||||
PlayoutAnchor startAnchor = FindStartAnchor(playout, playoutStart, scheduleItemsEnumerator);
|
||||
@@ -537,7 +541,7 @@ public class PlayoutBuilder : IPlayoutBuilder
|
||||
currentTime);
|
||||
|
||||
var schedulerOne = new PlayoutModeSchedulerOne(_logger);
|
||||
var schedulerMultiple = new PlayoutModeSchedulerMultiple(collectionMediaItems, _logger);
|
||||
var schedulerMultiple = new PlayoutModeSchedulerMultiple(collectionItemCount.ToMap(), _logger);
|
||||
var schedulerDuration = new PlayoutModeSchedulerDuration(_logger);
|
||||
var schedulerFlood = new PlayoutModeSchedulerFlood(_logger);
|
||||
|
||||
|
||||
@@ -8,11 +8,13 @@ namespace ErsatzTV.Core.Scheduling;
|
||||
|
||||
public class PlayoutModeSchedulerMultiple : PlayoutModeSchedulerBase<ProgramScheduleItemMultiple>
|
||||
{
|
||||
private readonly Map<CollectionKey, List<MediaItem>> _collectionMediaItems;
|
||||
private readonly Map<CollectionKey, int> _collectionItemCount;
|
||||
|
||||
public PlayoutModeSchedulerMultiple(Map<CollectionKey, List<MediaItem>> collectionMediaItems, ILogger logger)
|
||||
: base(logger) =>
|
||||
_collectionMediaItems = collectionMediaItems;
|
||||
public PlayoutModeSchedulerMultiple(Map<CollectionKey, int> collectionItemCount, ILogger logger)
|
||||
: base(logger)
|
||||
{
|
||||
_collectionItemCount = collectionItemCount;
|
||||
}
|
||||
|
||||
public override Tuple<PlayoutBuilderState, List<PlayoutItem>> Schedule(
|
||||
PlayoutBuilderState playoutBuilderState,
|
||||
@@ -40,7 +42,7 @@ public class PlayoutModeSchedulerMultiple : PlayoutModeSchedulerBase<ProgramSche
|
||||
{
|
||||
nextState = nextState with
|
||||
{
|
||||
MultipleRemaining = _collectionMediaItems[CollectionKey.ForScheduleItem(scheduleItem)].Count
|
||||
MultipleRemaining = _collectionItemCount[CollectionKey.ForScheduleItem(scheduleItem)]
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user