Пример #1
0
        public StoredToken GetToken(params string[] scopes)
        {
            if (scopes.Length == 0)
            {
                throw new ArgumentOutOfRangeException(
                          nameof(scopes),
                          "provide atleast 1 scope");
            }

            var token = FindTokenWithAllScopes(scopes);

            if (token != null)
            {
                if (token.Expired())
                {
                    tokens.Remove(token);
                }
                else
                {
                    return(token);
                }
            }

            Debug.WriteLine(
                $"Token expired or not suitable, requesting again. scopes: {string.Join(",", scopes)}, oldToken: {token}");

            token = _session.Mercury().SendSync(MercuryRequests.RequestToken(_session.DeviceId, scopes));

            Debug.WriteLine($"Updated token successfully! scopes: {string.Join(",", scopes)}, newToken: {token}");
            tokens.Add(token);
            return(token);
        }
Пример #2
0
        private List <ContextTrack> GetPage(int index)
        {
            if (index == -1)
            {
                throw new Exception("You must call nextPage() first!");
            }

            if (index == 0 && !_pages.Any() && _resolveUrl != null)
            {
                var m = _session.Mercury().SendSync(MercuryRequests.ResolveContext(_resolveUrl));
                var x = ProtoUtils.JsonToContextPages(JObject.Parse(m)["pages"] as JArray);
                _pages.AddRange(x);
            }

            _resolveUrl = null;

            if (index < _pages.Count)
            {
                var page   = _pages[index];
                var tracks = ResolvePage(page);
                page.ClearPageUrl();
                page.Tracks.Clear();
                page.Tracks.Add(tracks);
                _pages[index] = page;
                return(tracks);
            }
            else
            {
                if (index > _pages.Count)
                {
                    throw new IndexOutOfRangeException();
                }

                var prev = _pages[index - 1];
                if (!prev.HasNextPageUrl)
                {
                    throw new Exception("Illegal State");
                }

                var nextPageUrl = prev.NextPageUrl;
                prev.ClearNextPageUrl();
                _pages[index - 1] = prev;

                var tracks = FetchTracks(nextPageUrl);
                var tr     = new ContextPage();
                tr.Tracks.AddRange(tracks);
                _pages.Add(tr);

                return(tracks);
            }
        }