|
|
|
@ -15,7 +15,9 @@ public sealed class SeasonEpisodeMediaCollectionEnumerator : IMediaCollectionEnu |
|
|
|
{ |
|
|
|
{ |
|
|
|
CurrentIncludeInProgramGuide = Option<bool>.None; |
|
|
|
CurrentIncludeInProgramGuide = Option<bool>.None; |
|
|
|
|
|
|
|
|
|
|
|
_sortedMediaItems = mediaItems.OrderBy(identity, new SeasonEpisodeMediaComparer()).ToList(); |
|
|
|
_sortedMediaItems = mediaItems |
|
|
|
|
|
|
|
.Filter(mi => (mi is not Episode episode) || (episode.Season?.SeasonNumber ?? 0) > 0) |
|
|
|
|
|
|
|
.OrderBy(identity, new SeasonEpisodeMediaComparer()).ToList(); |
|
|
|
_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()); |
|
|
|
|
|
|
|
|
|
|
|
@ -42,7 +44,15 @@ public sealed class SeasonEpisodeMediaCollectionEnumerator : IMediaCollectionEnu |
|
|
|
public Option<MediaItem> Current => _sortedMediaItems.Count != 0 ? _sortedMediaItems[State.Index] : None; |
|
|
|
public Option<MediaItem> Current => _sortedMediaItems.Count != 0 ? _sortedMediaItems[State.Index] : None; |
|
|
|
public Option<bool> CurrentIncludeInProgramGuide { get; } |
|
|
|
public Option<bool> CurrentIncludeInProgramGuide { get; } |
|
|
|
|
|
|
|
|
|
|
|
public void MoveNext() => State.Index = (State.Index + 1) % _sortedMediaItems.Count; |
|
|
|
public void MoveNext() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (_sortedMediaItems.Count == 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
State.Index = (State.Index + 1) % _sortedMediaItems.Count; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public Option<TimeSpan> MinimumDuration => _lazyMinimumDuration.Value; |
|
|
|
public Option<TimeSpan> MinimumDuration => _lazyMinimumDuration.Value; |
|
|
|
|
|
|
|
|
|
|
|
|