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); }
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); } }