public void UpdateContext([NotNull] List <ContextPage> updatedPages) { var updatedTracks = updatedPages .SelectMany(x => x.Tracks).ToList(); foreach (var track in updatedTracks) { var index = Tracks.FindIndex(x => x.Uri == track.Uri); if (index == -1) { continue; } var b = new ContextTrack(Tracks[index]); ProtoUtils.CopyOverMetadata(track, b); Tracks[index] = b; if (index != GetCurrentTrackIndex()) { continue; } ProtoUtils.CopyOverMetadata(track, _state.ConnectState.Track); UpdateLikeDislike(); } }
public void AddToQueue([NotNull] ContextTrack track) { track.Metadata["is_queued"] = "true"; _queue.Add(track); UpdatePrevNextTracks(); UpdateTrackCount(); }
public static IPlayableId From([NotNull] ContextTrack track) { if (track.Uri.Contains("episode")) { return(new EpisodeId(track.Uri)); } return(new TrackId(track.Uri)); }
public static bool ShouldPlay([NotNull] ContextTrack track) { string forceRemoveReasons = null; if (track.Metadata.ContainsKey("force_remove_reasons")) { forceRemoveReasons = track.Metadata["force_remove_reasons"]; } return(forceRemoveReasons == null || forceRemoveReasons.IsEmpty()); }
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); } }
public static ContextTrack JsonToContextTrack([NotNull] JToken obj) { var j = obj["uri"]; var i = obj["uid"]; var b = new ContextTrack { Uri = obj["uri"]?.ToObject <string>() ?? "", Uid = obj["uid"]?.ToObject <string>() ?? "" }; var z = obj["metadata"]?.ToList <JToken>().Select(x => new MapField <string, string> { { x.ToObject <JProperty>()?.Name !, x.ToObject <JProperty>()?.Value.ToObject <string>() } });
public void EnrichCurrentTrack([NotNull] ContextTrack track) { if (_isPlayingQueue) { var b = _state.ConnectState.Track; ProtoUtils.EnrichTrack(b, track); } else { int index = (int)GetCurrentTrackIndex(); var current = Tracks[index]; ProtoUtils.EnrichTrack(current, track); Tracks[index] = current; _state.ConnectState.Track = ProtoUtils.ConvertToProvidedTrack(current); } }
public bool ShouldPlay([NotNull] ContextTrack track) { if (!PlayableId.IsSupported(track.Uri) || !PlayableId.ShouldPlay(track)) { return(false); } var filterExplicit = _state.Session.UserAttributes.ContainsKey("filter-explicit-content"); filterExplicit = !filterExplicit || bool.Parse(_state.Session.UserAttributes["filter-explicit-content"]); if (!filterExplicit) { return(true); } return(!bool.Parse(track.Metadata.ContainsKey("is_explicit") ? track.Metadata["is_explicit"] : "false")); }
public void SkipTo([NotNull] ContextTrack track) { SkipTo(track.Uri); EnrichCurrentTrack(track); }
public void SkipTo([NotNull] ContextTrack track) { TracksKeeper.SkipTo(track); SetPosition(0); }
public void AddToQueue([NotNull] ContextTrack track) { TracksKeeper.AddToQueue(track); }
public void OnQueueAdd(ContextTrack trc) { AddToQueue?.Invoke(this, trc); }