Пример #1
0
        public void InitializeStart()
        {
            if (!_state.Pages.NextPage())
            {
                throw new Exception("Illegal State");
            }

            Tracks.Clear();
            Tracks.AddRange(_state.Pages.CurrentPage());

            CheckComplete();
            if (!PlayableId.CanPlaySomething(Tracks))
            {
                throw new Exception("UnsupportedContextException");
            }

            var transformingShuffle = _state.ConnectState.ContextMetadata.ContainsKey("transform.shuffle");

            transformingShuffle = transformingShuffle && bool.Parse(_state.ConnectState.ContextMetadata["transform.shuffle"]);
            if (_state.Context.IsFinite() && _state.IsShufflingContext() && transformingShuffle)
            {
                ShuffleEntirely();
            }
            else
            {
                _state.ConnectState.Options.ShufflingContext = false;  // Must do this directly!
            }
            SetCurrentTrackIndex(0);
        }
Пример #2
0
        public void InitializeFrom(
            [NotNull] Func <List <ContextTrack>, int> finder,
            [CanBeNull] ContextTrack track,
            [CanBeNull] Queue contextQueue)
        {
            Tracks.Clear();
            _queue.Clear();

            while (true)
            {
                if (_state.Pages.NextPage())
                {
                    var newTracks = _state.Pages.CurrentPage();
                    var index     = finder(newTracks);
                    if (index == -1)
                    {
                        Tracks.AddRange(newTracks);
                        continue;
                    }

                    index += Tracks.Count();
                    Tracks.AddRange(newTracks);

                    SetCurrentTrackIndex(index);
                    break;
                }
                else
                {
                    _cannotLoadMore = true;
                    UpdateTrackCount();
                    throw new Exception("Couldn't find current track!");
                }
            }

            if (contextQueue != null)
            {
                foreach (var t in contextQueue.Tracks)
                {
                    _queue.Add(t);
                }
                _isPlayingQueue = contextQueue.IsPlayingQueue;
                UpdateState();
            }

            CheckComplete();
            if (!PlayableId.CanPlaySomething(Tracks))
            {
                throw new Exception("Cannot play anything");
            }

            if (track != null)
            {
                EnrichCurrentTrack(track);
            }
        }