Browse Source

fixes

pull/2949/head
Jason Dove 2 weeks ago
parent
commit
2b693b064b
No known key found for this signature in database
  1. 2
      ErsatzTV.Core/Scheduling/ChronologicalMediaCollectionEnumerator.cs
  2. 2
      ErsatzTV.Core/Scheduling/CustomOrderCollectionEnumerator.cs
  3. 2
      ErsatzTV.Core/Scheduling/OrderedScheduleItemsEnumerator.cs
  4. 6
      ErsatzTV.Core/Scheduling/PlaylistEnumerator.cs
  5. 6
      ErsatzTV.Core/Scheduling/PlayoutBuilder.cs
  6. 2
      ErsatzTV.Core/Scheduling/RandomizedMediaCollectionEnumerator.cs
  7. 2
      ErsatzTV.Core/Scheduling/RandomizedRotatingMediaCollectionEnumerator.cs
  8. 2
      ErsatzTV.Core/Scheduling/SeasonEpisodeMediaCollectionEnumerator.cs
  9. 2
      ErsatzTV.Core/Scheduling/ShuffleInOrderCollectionEnumerator.cs
  10. 3
      ErsatzTV.Core/Scheduling/ShuffledMediaCollectionEnumerator.cs
  11. 2
      ErsatzTV.Core/Scheduling/ShuffledScheduleItemsEnumerator.cs
  12. 2
      ErsatzTV.Infrastructure/Scheduling/MultiEpisodeShuffleCollectionEnumerator.cs

2
ErsatzTV.Core/Scheduling/ChronologicalMediaCollectionEnumerator.cs

@ -22,7 +22,7 @@ public sealed class ChronologicalMediaCollectionEnumerator : IMediaCollectionEnu
_lazyMediaItemGroupSize = new Lazy<Dictionary<int, int>>(CalculateMediaItemGroupSizes); _lazyMediaItemGroupSize = new Lazy<Dictionary<int, int>>(CalculateMediaItemGroupSizes);
State = new CollectionEnumeratorState { Seed = state.Seed }; State = new CollectionEnumeratorState { Seed = state.Seed, Started = state.Started };
if (state.Index >= _sortedMediaItems.Count) if (state.Index >= _sortedMediaItems.Count)
{ {

2
ErsatzTV.Core/Scheduling/CustomOrderCollectionEnumerator.cs

@ -25,7 +25,7 @@ public class CustomOrderCollectionEnumerator : IMediaCollectionEnumerator
_lazyMinimumDuration = new Lazy<Option<TimeSpan>>(() => _lazyMinimumDuration = new Lazy<Option<TimeSpan>>(() =>
_sortedMediaItems.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone()); _sortedMediaItems.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone());
State = new CollectionEnumeratorState { Seed = state.Seed }; State = new CollectionEnumeratorState { Seed = state.Seed, Started = state.Started };
while (State.Index < state.Index) while (State.Index < state.Index)
{ {
MoveNext(Option<DateTimeOffset>.None); MoveNext(Option<DateTimeOffset>.None);

2
ErsatzTV.Core/Scheduling/OrderedScheduleItemsEnumerator.cs

@ -13,7 +13,7 @@ public class OrderedScheduleItemsEnumerator : IScheduleItemsEnumerator
{ {
_sortedScheduleItems = scheduleItems.OrderBy(i => i.Index).ToList(); _sortedScheduleItems = scheduleItems.OrderBy(i => i.Index).ToList();
State = new CollectionEnumeratorState { Seed = state.Seed }; State = new CollectionEnumeratorState { Seed = state.Seed, Started = state.Started };
if (state.Index >= _sortedScheduleItems.Count) if (state.Index >= _sortedScheduleItems.Count)
{ {

6
ErsatzTV.Core/Scheduling/PlaylistEnumerator.cs

@ -178,7 +178,7 @@ public class PlaylistEnumerator : IMediaCollectionEnumerator
case PlaybackOrder.Chronological: case PlaybackOrder.Chronological:
if (randomStartPoint) if (randomStartPoint)
{ {
initState.Index = random.Next(0, items.Count - 1); initState.Index = items.Count > 0 ? random.Next(0, items.Count) : 0;
} }
enumerator = new ChronologicalMediaCollectionEnumerator(items, initState); enumerator = new ChronologicalMediaCollectionEnumerator(items, initState);
@ -208,7 +208,7 @@ public class PlaylistEnumerator : IMediaCollectionEnumerator
case PlaybackOrder.SeasonEpisode: case PlaybackOrder.SeasonEpisode:
if (randomStartPoint) if (randomStartPoint)
{ {
initState.Index = random.Next(0, items.Count - 1); initState.Index = items.Count > 0 ? random.Next(0, items.Count) : 0;
} }
enumerator = new SeasonEpisodeMediaCollectionEnumerator(items, initState); enumerator = new SeasonEpisodeMediaCollectionEnumerator(items, initState);
@ -248,7 +248,7 @@ public class PlaylistEnumerator : IMediaCollectionEnumerator
result._sortedEnumerators = result.ShufflePlaylistItems(); result._sortedEnumerators = result.ShufflePlaylistItems();
} }
result.State = new CollectionEnumeratorState { Seed = state.Seed }; result.State = new CollectionEnumeratorState { Seed = state.Seed, Started = state.Started };
result.EnumeratorIndex = 0; result.EnumeratorIndex = 0;
// this was a bug when playlist enumerators were first added; shouldn't happen anymore // this was a bug when playlist enumerators were first added; shouldn't happen anymore

6
ErsatzTV.Core/Scheduling/PlayoutBuilder.cs

@ -1344,7 +1344,7 @@ public class PlayoutBuilder : IPlayoutBuilder
state = new CollectionEnumeratorState state = new CollectionEnumeratorState
{ {
Seed = state.Seed, Seed = state.Seed,
Index = random.Next(0, mediaItems.Count - 1) Index = mediaItems.Count > 0 ? random.Next(0, mediaItems.Count) : 0
}; };
} }
@ -1355,7 +1355,7 @@ public class PlayoutBuilder : IPlayoutBuilder
state = new CollectionEnumeratorState state = new CollectionEnumeratorState
{ {
Seed = state.Seed, Seed = state.Seed,
Index = random.Next(0, mediaItems.Count - 1) Index = mediaItems.Count > 0 ? random.Next(0, mediaItems.Count) : 0
}; };
} }
@ -1369,7 +1369,7 @@ public class PlayoutBuilder : IPlayoutBuilder
collectionKey, collectionKey,
cancellationToken), cancellationToken),
state, state,
activeSchedule.RandomStartPoint, randomStartPoint,
cancellationToken); cancellationToken);
case PlaybackOrder.MultiEpisodeShuffle when case PlaybackOrder.MultiEpisodeShuffle when
collectionKey.CollectionType == CollectionType.TelevisionShow && collectionKey.CollectionType == CollectionType.TelevisionShow &&

2
ErsatzTV.Core/Scheduling/RandomizedMediaCollectionEnumerator.cs

@ -21,7 +21,7 @@ public class RandomizedMediaCollectionEnumerator : IMediaCollectionEnumerator
_mediaItems.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone()); _mediaItems.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone());
_random = new Random(state.Seed); _random = new Random(state.Seed);
State = new CollectionEnumeratorState { Seed = state.Seed }; State = new CollectionEnumeratorState { Seed = state.Seed, Started = state.Started };
// we want to move at least once so we start with a random item and not the first // we want to move at least once so we start with a random item and not the first
// because _index defaults to 0 // because _index defaults to 0
if (State.Index == state.Index) if (State.Index == state.Index)

2
ErsatzTV.Core/Scheduling/RandomizedRotatingMediaCollectionEnumerator.cs

@ -45,7 +45,7 @@ public class RandomizedRotatingMediaCollectionEnumerator : IMediaCollectionEnume
_groupNumber = 0; _groupNumber = 0;
State = new CollectionEnumeratorState { Seed = state.Seed }; State = new CollectionEnumeratorState { Seed = state.Seed, Started = state.Started };
// we want to move at least once so we start with a random item and not the first // we want to move at least once so we start with a random item and not the first
// because _index defaults to 0 // because _index defaults to 0
if (State.Index == state.Index) if (State.Index == state.Index)

2
ErsatzTV.Core/Scheduling/SeasonEpisodeMediaCollectionEnumerator.cs

@ -21,7 +21,7 @@ public sealed class SeasonEpisodeMediaCollectionEnumerator : IMediaCollectionEnu
_lazyMinimumDuration = new Lazy<Option<TimeSpan>>(() => _lazyMinimumDuration = new Lazy<Option<TimeSpan>>(() =>
_sortedMediaItems.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone()); _sortedMediaItems.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone());
State = new CollectionEnumeratorState { Seed = state.Seed }; State = new CollectionEnumeratorState { Seed = state.Seed, Started = state.Started };
if (state.Index >= _sortedMediaItems.Count) if (state.Index >= _sortedMediaItems.Count)
{ {

2
ErsatzTV.Core/Scheduling/ShuffleInOrderCollectionEnumerator.cs

@ -39,7 +39,7 @@ public class ShuffleInOrderCollectionEnumerator : IMediaCollectionEnumerator
new Lazy<Option<TimeSpan>>(() => new Lazy<Option<TimeSpan>>(() =>
_shuffled.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone()); _shuffled.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone());
State = new CollectionEnumeratorState { Seed = state.Seed }; State = new CollectionEnumeratorState { Seed = state.Seed, Started = state.Started };
while (State.Index < state.Index) while (State.Index < state.Index)
{ {
MoveNext(Option<DateTimeOffset>.None); MoveNext(Option<DateTimeOffset>.None);

3
ErsatzTV.Core/Scheduling/ShuffledMediaCollectionEnumerator.cs

@ -36,7 +36,7 @@ public class ShuffledMediaCollectionEnumerator : IMediaCollectionEnumerator
new Lazy<Option<TimeSpan>>(() => new Lazy<Option<TimeSpan>>(() =>
_shuffled.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone()); _shuffled.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone());
State = new CollectionEnumeratorState { Seed = state.Seed }; State = new CollectionEnumeratorState { Seed = state.Seed, Started = state.Started };
while (State.Index < state.Index) while (State.Index < state.Index)
{ {
MoveNext(Option<DateTimeOffset>.None); MoveNext(Option<DateTimeOffset>.None);
@ -54,6 +54,7 @@ public class ShuffledMediaCollectionEnumerator : IMediaCollectionEnumerator
State.Seed = state.Seed; State.Seed = state.Seed;
State.Index = state.Index; State.Index = state.Index;
State.Started = state.Started;
} }
public string SchedulingContextName => "Shuffle"; public string SchedulingContextName => "Shuffle";

2
ErsatzTV.Core/Scheduling/ShuffledScheduleItemsEnumerator.cs

@ -26,7 +26,7 @@ public class ShuffledScheduleItemsEnumerator : IScheduleItemsEnumerator
_random = new CloneableRandom(state.Seed); _random = new CloneableRandom(state.Seed);
_shuffled = Shuffle(_scheduleItems, _random); _shuffled = Shuffle(_scheduleItems, _random);
State = new CollectionEnumeratorState { Seed = state.Seed }; State = new CollectionEnumeratorState { Seed = state.Seed, Started = state.Started };
while (State.Index < state.Index) while (State.Index < state.Index)
{ {
MoveNext(); MoveNext();

2
ErsatzTV.Infrastructure/Scheduling/MultiEpisodeShuffleCollectionEnumerator.cs

@ -83,7 +83,7 @@ public class MultiEpisodeShuffleCollectionEnumerator : IMediaCollectionEnumerato
new Lazy<Option<TimeSpan>>(() => new Lazy<Option<TimeSpan>>(() =>
_shuffled.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone()); _shuffled.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone());
State = new CollectionEnumeratorState { Seed = state.Seed }; State = new CollectionEnumeratorState { Seed = state.Seed, Started = state.Started };
while (State.Index < state.Index) while (State.Index < state.Index)
{ {
MoveNext(Option<DateTimeOffset>.None); MoveNext(Option<DateTimeOffset>.None);

Loading…
Cancel
Save