fix multiple zero when using fill with group (#1535)
This commit is contained in:
@@ -17,6 +17,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
### Fixed
|
### Fixed
|
||||||
- Fix error loading path replacements when using MySql
|
- Fix error loading path replacements when using MySql
|
||||||
- Fix tray icon shortcut to open logs folder on Windows
|
- Fix tray icon shortcut to open logs folder on Windows
|
||||||
|
- Unlock playout when playout build fails
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- Upgrade from .NET 7 to .NET 8
|
- Upgrade from .NET 7 to .NET 8
|
||||||
|
|||||||
@@ -70,8 +70,6 @@ public class BuildPlayoutHandler : IRequestHandler<BuildPlayout, Either<BaseErro
|
|||||||
_ffmpegSegmenterService.PlayoutUpdated(playout.Channel.Number);
|
_ffmpegSegmenterService.PlayoutUpdated(playout.Channel.Number);
|
||||||
}
|
}
|
||||||
|
|
||||||
_entityLocker.UnlockPlayout(playout.Id);
|
|
||||||
|
|
||||||
Option<string> maybeChannelNumber = await dbContext.Connection
|
Option<string> maybeChannelNumber = await dbContext.Connection
|
||||||
.QuerySingleOrDefaultAsync<string>(
|
.QuerySingleOrDefaultAsync<string>(
|
||||||
@"select C.Number from Channel C
|
@"select C.Number from Channel C
|
||||||
@@ -103,6 +101,10 @@ public class BuildPlayoutHandler : IRequestHandler<BuildPlayout, Either<BaseErro
|
|||||||
return BaseError.New(
|
return BaseError.New(
|
||||||
$"Unexpected error building playout for channel {playout.Channel.Name}: {ex.Message}");
|
$"Unexpected error building playout for channel {playout.Channel.Name}: {ex.Message}");
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_entityLocker.UnlockPlayout(playout.Id);
|
||||||
|
}
|
||||||
|
|
||||||
return Unit.Default;
|
return Unit.Default;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,14 +44,14 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
|||||||
collectionOne.MediaItems,
|
collectionOne.MediaItems,
|
||||||
new CollectionEnumeratorState());
|
new CollectionEnumeratorState());
|
||||||
|
|
||||||
var collectionMediaItems = new Dictionary<CollectionKey, List<MediaItem>>
|
var collectionItemCount = new Dictionary<CollectionKey, int>
|
||||||
{
|
{
|
||||||
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems }
|
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems.Count }
|
||||||
}.ToMap();
|
}.ToMap();
|
||||||
|
|
||||||
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
||||||
|
|
||||||
var scheduler = new PlayoutModeSchedulerMultiple(collectionMediaItems, Substitute.For<ILogger>());
|
var scheduler = new PlayoutModeSchedulerMultiple(collectionItemCount, Substitute.For<ILogger>());
|
||||||
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
||||||
startState,
|
startState,
|
||||||
CollectionEnumerators(scheduleItem, enumerator),
|
CollectionEnumerators(scheduleItem, enumerator),
|
||||||
@@ -119,14 +119,14 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
|||||||
collectionOne.MediaItems,
|
collectionOne.MediaItems,
|
||||||
new CollectionEnumeratorState());
|
new CollectionEnumeratorState());
|
||||||
|
|
||||||
var collectionMediaItems = new Dictionary<CollectionKey, List<MediaItem>>
|
var collectionItemCount = new Dictionary<CollectionKey, int>
|
||||||
{
|
{
|
||||||
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems }
|
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems.Count }
|
||||||
}.ToMap();
|
}.ToMap();
|
||||||
|
|
||||||
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
||||||
|
|
||||||
var scheduler = new PlayoutModeSchedulerMultiple(collectionMediaItems, Substitute.For<ILogger>());
|
var scheduler = new PlayoutModeSchedulerMultiple(collectionItemCount, Substitute.For<ILogger>());
|
||||||
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
||||||
startState,
|
startState,
|
||||||
CollectionEnumerators(scheduleItem, enumerator),
|
CollectionEnumerators(scheduleItem, enumerator),
|
||||||
@@ -201,15 +201,15 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
|||||||
collectionTwo.MediaItems,
|
collectionTwo.MediaItems,
|
||||||
new CollectionEnumeratorState());
|
new CollectionEnumeratorState());
|
||||||
|
|
||||||
var collectionMediaItems = new Dictionary<CollectionKey, List<MediaItem>>
|
var collectionItemCount = new Dictionary<CollectionKey, int>
|
||||||
{
|
{
|
||||||
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems },
|
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems.Count },
|
||||||
{ CollectionKey.ForFillerPreset(scheduleItem.TailFiller), collectionTwo.MediaItems }
|
{ CollectionKey.ForFillerPreset(scheduleItem.TailFiller), collectionTwo.MediaItems.Count }
|
||||||
}.ToMap();
|
}.ToMap();
|
||||||
|
|
||||||
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
||||||
|
|
||||||
var scheduler = new PlayoutModeSchedulerMultiple(collectionMediaItems, Substitute.For<ILogger>());
|
var scheduler = new PlayoutModeSchedulerMultiple(collectionItemCount, Substitute.For<ILogger>());
|
||||||
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
||||||
startState,
|
startState,
|
||||||
CollectionEnumerators(scheduleItem, enumerator1, scheduleItem.TailFiller, enumerator2),
|
CollectionEnumerators(scheduleItem, enumerator1, scheduleItem.TailFiller, enumerator2),
|
||||||
@@ -300,15 +300,15 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
|||||||
collectionTwo.MediaItems,
|
collectionTwo.MediaItems,
|
||||||
new CollectionEnumeratorState());
|
new CollectionEnumeratorState());
|
||||||
|
|
||||||
var collectionMediaItems = new Dictionary<CollectionKey, List<MediaItem>>
|
var collectionItemCount = new Dictionary<CollectionKey, int>
|
||||||
{
|
{
|
||||||
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems },
|
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems.Count },
|
||||||
{ CollectionKey.ForFillerPreset(scheduleItem.FallbackFiller), collectionTwo.MediaItems }
|
{ CollectionKey.ForFillerPreset(scheduleItem.FallbackFiller), collectionTwo.MediaItems.Count }
|
||||||
}.ToMap();
|
}.ToMap();
|
||||||
|
|
||||||
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
||||||
|
|
||||||
var scheduler = new PlayoutModeSchedulerMultiple(collectionMediaItems, Substitute.For<ILogger>());
|
var scheduler = new PlayoutModeSchedulerMultiple(collectionItemCount, Substitute.For<ILogger>());
|
||||||
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
||||||
startState,
|
startState,
|
||||||
CollectionEnumerators(scheduleItem, enumerator1, scheduleItem.FallbackFiller, enumerator2),
|
CollectionEnumerators(scheduleItem, enumerator1, scheduleItem.FallbackFiller, enumerator2),
|
||||||
@@ -389,15 +389,15 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
|||||||
collectionTwo.MediaItems,
|
collectionTwo.MediaItems,
|
||||||
new CollectionEnumeratorState());
|
new CollectionEnumeratorState());
|
||||||
|
|
||||||
var collectionMediaItems = new Dictionary<CollectionKey, List<MediaItem>>
|
var collectionItemCount = new Dictionary<CollectionKey, int>
|
||||||
{
|
{
|
||||||
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems },
|
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems.Count },
|
||||||
{ CollectionKey.ForFillerPreset(scheduleItem.TailFiller), collectionTwo.MediaItems }
|
{ CollectionKey.ForFillerPreset(scheduleItem.TailFiller), collectionTwo.MediaItems.Count }
|
||||||
}.ToMap();
|
}.ToMap();
|
||||||
|
|
||||||
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
||||||
|
|
||||||
var scheduler = new PlayoutModeSchedulerMultiple(collectionMediaItems, Substitute.For<ILogger>());
|
var scheduler = new PlayoutModeSchedulerMultiple(collectionItemCount, Substitute.For<ILogger>());
|
||||||
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
||||||
startState,
|
startState,
|
||||||
CollectionEnumerators(scheduleItem, enumerator1, scheduleItem.TailFiller, enumerator2),
|
CollectionEnumerators(scheduleItem, enumerator1, scheduleItem.TailFiller, enumerator2),
|
||||||
@@ -498,16 +498,16 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
|||||||
collectionThree.MediaItems,
|
collectionThree.MediaItems,
|
||||||
new CollectionEnumeratorState());
|
new CollectionEnumeratorState());
|
||||||
|
|
||||||
var collectionMediaItems = new Dictionary<CollectionKey, List<MediaItem>>
|
var collectionItemCount = new Dictionary<CollectionKey, int>
|
||||||
{
|
{
|
||||||
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems },
|
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems.Count },
|
||||||
{ CollectionKey.ForFillerPreset(scheduleItem.TailFiller), collectionTwo.MediaItems },
|
{ CollectionKey.ForFillerPreset(scheduleItem.TailFiller), collectionTwo.MediaItems.Count },
|
||||||
{ CollectionKey.ForFillerPreset(scheduleItem.FallbackFiller), collectionThree.MediaItems }
|
{ CollectionKey.ForFillerPreset(scheduleItem.FallbackFiller), collectionThree.MediaItems.Count }
|
||||||
}.ToMap();
|
}.ToMap();
|
||||||
|
|
||||||
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
||||||
|
|
||||||
var scheduler = new PlayoutModeSchedulerMultiple(collectionMediaItems, Substitute.For<ILogger>());
|
var scheduler = new PlayoutModeSchedulerMultiple(collectionItemCount, Substitute.For<ILogger>());
|
||||||
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
||||||
startState,
|
startState,
|
||||||
CollectionEnumerators(
|
CollectionEnumerators(
|
||||||
@@ -620,16 +620,16 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
|||||||
collectionThree.MediaItems,
|
collectionThree.MediaItems,
|
||||||
new CollectionEnumeratorState());
|
new CollectionEnumeratorState());
|
||||||
|
|
||||||
var collectionMediaItems = new Dictionary<CollectionKey, List<MediaItem>>
|
var collectionItemCount = new Dictionary<CollectionKey, int>
|
||||||
{
|
{
|
||||||
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems },
|
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems.Count },
|
||||||
{ CollectionKey.ForFillerPreset(scheduleItem.TailFiller), collectionTwo.MediaItems },
|
{ CollectionKey.ForFillerPreset(scheduleItem.TailFiller), collectionTwo.MediaItems.Count },
|
||||||
{ CollectionKey.ForFillerPreset(scheduleItem.FallbackFiller), collectionThree.MediaItems }
|
{ CollectionKey.ForFillerPreset(scheduleItem.FallbackFiller), collectionThree.MediaItems.Count }
|
||||||
}.ToMap();
|
}.ToMap();
|
||||||
|
|
||||||
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
||||||
|
|
||||||
var scheduler = new PlayoutModeSchedulerMultiple(collectionMediaItems, Substitute.For<ILogger>());
|
var scheduler = new PlayoutModeSchedulerMultiple(collectionItemCount, Substitute.For<ILogger>());
|
||||||
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
||||||
startState,
|
startState,
|
||||||
CollectionEnumerators(
|
CollectionEnumerators(
|
||||||
@@ -708,14 +708,14 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
|||||||
sortedScheduleItems,
|
sortedScheduleItems,
|
||||||
new CollectionEnumeratorState());
|
new CollectionEnumeratorState());
|
||||||
|
|
||||||
var collectionMediaItems = new Dictionary<CollectionKey, List<MediaItem>>
|
var collectionItemCount = new Dictionary<CollectionKey, int>
|
||||||
{
|
{
|
||||||
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems }
|
{ CollectionKey.ForScheduleItem(scheduleItem), collectionOne.MediaItems.Count }
|
||||||
}.ToMap();
|
}.ToMap();
|
||||||
|
|
||||||
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
PlayoutBuilderState startState = StartState(scheduleItemsEnumerator);
|
||||||
|
|
||||||
var scheduler = new PlayoutModeSchedulerMultiple(collectionMediaItems, Substitute.For<ILogger>());
|
var scheduler = new PlayoutModeSchedulerMultiple(collectionItemCount, Substitute.For<ILogger>());
|
||||||
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
(PlayoutBuilderState playoutBuilderState, List<PlayoutItem> playoutItems) = scheduler.Schedule(
|
||||||
startState,
|
startState,
|
||||||
CollectionEnumerators(scheduleItem, enumerator),
|
CollectionEnumerators(scheduleItem, enumerator),
|
||||||
|
|||||||
@@ -406,7 +406,27 @@ public class PlayoutBuilder : IPlayoutBuilder
|
|||||||
: new OrderedScheduleItemsEnumerator(activeSchedule.Items, scheduleItemsEnumeratorState);
|
: new OrderedScheduleItemsEnumerator(activeSchedule.Items, scheduleItemsEnumeratorState);
|
||||||
|
|
||||||
var collectionEnumerators = new Dictionary<CollectionKey, IMediaCollectionEnumerator>();
|
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>();
|
var scheduleItemsFillGroupEnumerators = new Dictionary<int, IScheduleItemsEnumerator>();
|
||||||
foreach (ProgramScheduleItem scheduleItem in sortedScheduleItems.Where(si => si.FillWithGroupMode is not FillWithGroupMode.None))
|
foreach (ProgramScheduleItem scheduleItem in sortedScheduleItems.Where(si => si.FillWithGroupMode is not FillWithGroupMode.None))
|
||||||
{
|
{
|
||||||
@@ -453,6 +473,9 @@ public class PlayoutBuilder : IPlayoutBuilder
|
|||||||
cancellationToken);
|
cancellationToken);
|
||||||
|
|
||||||
collectionEnumerators.Add(key, enumerator);
|
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 =
|
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
|
// find start anchor
|
||||||
PlayoutAnchor startAnchor = FindStartAnchor(playout, playoutStart, scheduleItemsEnumerator);
|
PlayoutAnchor startAnchor = FindStartAnchor(playout, playoutStart, scheduleItemsEnumerator);
|
||||||
@@ -537,7 +541,7 @@ public class PlayoutBuilder : IPlayoutBuilder
|
|||||||
currentTime);
|
currentTime);
|
||||||
|
|
||||||
var schedulerOne = new PlayoutModeSchedulerOne(_logger);
|
var schedulerOne = new PlayoutModeSchedulerOne(_logger);
|
||||||
var schedulerMultiple = new PlayoutModeSchedulerMultiple(collectionMediaItems, _logger);
|
var schedulerMultiple = new PlayoutModeSchedulerMultiple(collectionItemCount.ToMap(), _logger);
|
||||||
var schedulerDuration = new PlayoutModeSchedulerDuration(_logger);
|
var schedulerDuration = new PlayoutModeSchedulerDuration(_logger);
|
||||||
var schedulerFlood = new PlayoutModeSchedulerFlood(_logger);
|
var schedulerFlood = new PlayoutModeSchedulerFlood(_logger);
|
||||||
|
|
||||||
|
|||||||
@@ -8,11 +8,13 @@ namespace ErsatzTV.Core.Scheduling;
|
|||||||
|
|
||||||
public class PlayoutModeSchedulerMultiple : PlayoutModeSchedulerBase<ProgramScheduleItemMultiple>
|
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)
|
public PlayoutModeSchedulerMultiple(Map<CollectionKey, int> collectionItemCount, ILogger logger)
|
||||||
: base(logger) =>
|
: base(logger)
|
||||||
_collectionMediaItems = collectionMediaItems;
|
{
|
||||||
|
_collectionItemCount = collectionItemCount;
|
||||||
|
}
|
||||||
|
|
||||||
public override Tuple<PlayoutBuilderState, List<PlayoutItem>> Schedule(
|
public override Tuple<PlayoutBuilderState, List<PlayoutItem>> Schedule(
|
||||||
PlayoutBuilderState playoutBuilderState,
|
PlayoutBuilderState playoutBuilderState,
|
||||||
@@ -40,7 +42,7 @@ public class PlayoutModeSchedulerMultiple : PlayoutModeSchedulerBase<ProgramSche
|
|||||||
{
|
{
|
||||||
nextState = nextState with
|
nextState = nextState with
|
||||||
{
|
{
|
||||||
MultipleRemaining = _collectionMediaItems[CollectionKey.ForScheduleItem(scheduleItem)].Count
|
MultipleRemaining = _collectionItemCount[CollectionKey.ForScheduleItem(scheduleItem)]
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user