Esempio n. 1
0
        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)]));
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
 public IPlayableId GetCurrentPlayable() =>
 ConnectState.Track == null ? null : PlayableId.From(ConnectState.Track);