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