Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
 public void AddToQueue([NotNull] ContextTrack track)
 {
     track.Metadata["is_queued"] = "true";
     _queue.Add(track);
     UpdatePrevNextTracks();
     UpdateTrackCount();
 }
Beispiel #3
0
 public static IPlayableId From([NotNull] ContextTrack track)
 {
     if (track.Uri.Contains("episode"))
     {
         return(new EpisodeId(track.Uri));
     }
     return(new TrackId(track.Uri));
 }
Beispiel #4
0
        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());
        }
Beispiel #5
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);
            }
        }
Beispiel #6
0
 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>()
         }
     });
Beispiel #7
0
 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);
     }
 }
Beispiel #8
0
        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"));
        }
Beispiel #9
0
 public void SkipTo([NotNull] ContextTrack track)
 {
     SkipTo(track.Uri);
     EnrichCurrentTrack(track);
 }
Beispiel #10
0
 public void SkipTo([NotNull] ContextTrack track)
 {
     TracksKeeper.SkipTo(track);
     SetPosition(0);
 }
Beispiel #11
0
 public void AddToQueue([NotNull] ContextTrack track)
 {
     TracksKeeper.AddToQueue(track);
 }
Beispiel #12
0
 public void OnQueueAdd(ContextTrack trc)
 {
     AddToQueue?.Invoke(this, trc);
 }