public (int index, IPlayableId id)? NextPlayableDoNotSet() { if (_state.ConnectState.Options.RepeatingTrack) { return((int)GetCurrentTrackIndex(), PlayableId.From(Tracks[(int)GetCurrentTrackIndex()])); } if (_queue.Any()) { return(-1, PlayableId.From(_queue.First())); } int current = (int)GetCurrentTrackIndex(); if (current == Tracks.Count - 1) { if (_state.IsShufflingContext() || _cannotLoadMore) { return(null); } if (_state.Pages.NextPage()) { Tracks.AddRange(_state.Pages.CurrentPage()); } else { _cannotLoadMore = true; UpdateTrackCount(); return(null); } } if (!_state.Context.IsFinite() && Tracks.Count - current <= 5) { if (_state.Pages.NextPage()) { Tracks.AddRange(_state.Pages.CurrentPage()); Debug.WriteLine("Preloaded next page due to infinite context."); } else { Debug.WriteLine("Couldn't (pre)load next page of context!"); } } int add = 1; while (true) { var track = Tracks[current + add]; if (ShouldPlay(track)) { break; } add++; } return(current + add, PlayableId.From(Tracks[(current + add)])); }
public TrackOrEpisode([CanBeNull] Track track, [CanBeNull] Episode episode) { if (track == null && episode == null) { throw new ArgumentOutOfRangeException(); } this.track = track; this.episode = episode; if (track != null) { id = PlayableId.From(track); } else { id = PlayableId.From(episode); } }
public IPlayableId GetCurrentPlayable() => ConnectState.Track == null ? null : PlayableId.From(ConnectState.Track);