|
|
@ -10,8 +10,6 @@ namespace ErsatzTV.Infrastructure.Scheduling; |
|
|
|
public class MultiEpisodeShuffleCollectionEnumerator : IMediaCollectionEnumerator |
|
|
|
public class MultiEpisodeShuffleCollectionEnumerator : IMediaCollectionEnumerator |
|
|
|
{ |
|
|
|
{ |
|
|
|
private readonly CancellationToken _cancellationToken; |
|
|
|
private readonly CancellationToken _cancellationToken; |
|
|
|
private readonly IList<MediaItem> _mediaItems; |
|
|
|
|
|
|
|
private readonly IScriptEngine _scriptEngine; |
|
|
|
|
|
|
|
private readonly ILogger _logger; |
|
|
|
private readonly ILogger _logger; |
|
|
|
private readonly int _mediaItemCount; |
|
|
|
private readonly int _mediaItemCount; |
|
|
|
private readonly Dictionary<int, List<MediaItem>> _mediaItemGroups; |
|
|
|
private readonly Dictionary<int, List<MediaItem>> _mediaItemGroups; |
|
|
@ -21,15 +19,13 @@ public class MultiEpisodeShuffleCollectionEnumerator : IMediaCollectionEnumerato |
|
|
|
private readonly Lazy<Option<TimeSpan>> _lazyMinimumDuration; |
|
|
|
private readonly Lazy<Option<TimeSpan>> _lazyMinimumDuration; |
|
|
|
|
|
|
|
|
|
|
|
public MultiEpisodeShuffleCollectionEnumerator( |
|
|
|
public MultiEpisodeShuffleCollectionEnumerator( |
|
|
|
IList<MediaItem> mediaItems, |
|
|
|
ICollection<MediaItem> mediaItems, |
|
|
|
CollectionEnumeratorState state, |
|
|
|
CollectionEnumeratorState state, |
|
|
|
IScriptEngine scriptEngine, |
|
|
|
IScriptEngine scriptEngine, |
|
|
|
string scriptFile, |
|
|
|
string scriptFile, |
|
|
|
ILogger logger, |
|
|
|
ILogger logger, |
|
|
|
CancellationToken cancellationToken) |
|
|
|
CancellationToken cancellationToken) |
|
|
|
{ |
|
|
|
{ |
|
|
|
_mediaItems = mediaItems; |
|
|
|
|
|
|
|
_scriptEngine = scriptEngine; |
|
|
|
|
|
|
|
_logger = logger; |
|
|
|
_logger = logger; |
|
|
|
_cancellationToken = cancellationToken; |
|
|
|
_cancellationToken = cancellationToken; |
|
|
|
|
|
|
|
|
|
|
@ -91,15 +87,16 @@ public class MultiEpisodeShuffleCollectionEnumerator : IMediaCollectionEnumerato |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public IMediaCollectionEnumerator Clone(CollectionEnumeratorState state, CancellationToken cancellationToken) |
|
|
|
public void ResetState(CollectionEnumeratorState state) |
|
|
|
{ |
|
|
|
{ |
|
|
|
return new MultiEpisodeShuffleCollectionEnumerator( |
|
|
|
// only re-shuffle if needed
|
|
|
|
_mediaItems, |
|
|
|
if (State.Seed != state.Seed) |
|
|
|
state, |
|
|
|
{ |
|
|
|
_scriptEngine, |
|
|
|
_random = new CloneableRandom(state.Seed); |
|
|
|
null, |
|
|
|
_shuffled = Shuffle(_random); |
|
|
|
_logger, |
|
|
|
} |
|
|
|
cancellationToken); |
|
|
|
|
|
|
|
|
|
|
|
State.Index = state.Index; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public CollectionEnumeratorState State { get; } |
|
|
|
public CollectionEnumeratorState State { get; } |
|
|
|