public static async Task QueueAlbumAsync( string albumId, Guid userId, IRepositoryManager repositoryManager, SpotifyAPICredentials spotifyAPICredentials) { try { var user = await repositoryManager.UserRepository.GetByIdAsync(userId); if (user != null) { if (user.SpotifyRefreshToken != null) { var spotifyAuthRefreshRequest = new AuthorizationCodeRefreshRequest ( spotifyAPICredentials.ClientId, spotifyAPICredentials.ClientSecret, DecryptionService.DecryptString(user.SpotifyRefreshToken) ); var spotifyAuthResponse = await new OAuthClient().RequestToken(spotifyAuthRefreshRequest); var spotifyToken = spotifyAuthResponse.AccessToken; var spotifyClient = new SpotifyClient(spotifyToken); var activeDevices = await spotifyClient.Player.GetAvailableDevices(); if (activeDevices.Devices.Count > 0) { var album = await spotifyClient.Albums.Get(albumId); foreach (var track in album.Tracks.Items) { var trackQueueRequest = new PlayerAddToQueueRequest(track.Uri); await spotifyClient.Player.AddToQueue(trackQueueRequest); } } else { throw new SpotifyNoActiveDevicesException("No Active Devices Found", "No Active Devices Found"); } } else { throw new SpotifyNotLinkedException("Spotify Account not Linked", "Spotify Account not Linked"); } } } catch (Exception) { throw; } }
public async Task <SpotifyTokenResponse> RefreshTokenAsync(string refreshToken, string spotifyClientId, string spotifyClientSecret) { try { var request = new AuthorizationCodeRefreshRequest(spotifyClientId, spotifyClientSecret, refreshToken); var response = await new OAuthClient().RequestToken(request); return(new SpotifyTokenResponse(response.AccessToken, response.ExpiresIn)); } catch (Exception ex) { return(null); } }
public static async Task <IEnumerable <SimplePlaylist> > GetUserPlaylistsAsync( SpotifyAPICredentials spotifyAPICredentials, Guid userId, int page, int pageSize, IRepositoryManager repositoryManager) { try { var user = await repositoryManager.UserRepository.GetByIdAsync(userId); if (user.SpotifyRefreshToken != null) { var spotifyAuthRefreshRequest = new AuthorizationCodeRefreshRequest ( spotifyAPICredentials.ClientId, spotifyAPICredentials.ClientSecret, DecryptionService.DecryptString(user.SpotifyRefreshToken) ); var spotifyAuthResponse = await new OAuthClient().RequestToken(spotifyAuthRefreshRequest); var spotifyToken = spotifyAuthResponse.AccessToken; var spotifyClient = new SpotifyClient(spotifyToken); var playlistsRequest = new PlaylistCurrentUsersRequest { Limit = pageSize, Offset = page * pageSize }; var playlists = await spotifyClient.Playlists.CurrentUsers(playlistsRequest); return(playlists.Items); } else { throw new SpotifyNotLinkedException("Spotify Account not Linked", "Spotify Account not Linked"); } } catch (Exception) { throw; } }
public async Task ConnectWebClient(bool keepRefreshToken = true) { _securityStore = SecurityStore.Load(pluginDirectory); EmbedIOAuthServer _server = new EmbedIOAuthServer(new Uri("http://localhost:4002/callback"), 4002); if (_securityStore.HasRefreshToken && keepRefreshToken) { var refreshRequest = new AuthorizationCodeRefreshRequest(_securityStore.ClientId, _securityStore.ClientSecret, _securityStore.RefreshToken); var refreshResponse = await new OAuthClient().RequestToken(refreshRequest); lock (_lock) { _spotifyClient = new SpotifyClient(refreshResponse.AccessToken); } } else { await _server.Start(); _server.AuthorizationCodeReceived += async(object sender, AuthorizationCodeResponse response) => { await _server.Stop(); AuthorizationCodeTokenResponse token = await new OAuthClient().RequestToken( new AuthorizationCodeTokenRequest(_securityStore.ClientId, _securityStore.ClientSecret, response.Code, _server.BaseUri)); lock (_lock) { _securityStore.RefreshToken = token.RefreshToken; _securityStore.Save(pluginDirectory); _spotifyClient = new SpotifyClient(token.AccessToken); } }; _server.ErrorReceived += async(object sender, string error, string state) => { Console.WriteLine($"Aborting authorization, error received: {error}"); await _server.Stop(); }; var request = new LoginRequest(_server.BaseUri, _securityStore.ClientId, LoginRequest.ResponseType.Code) { Scope = new List <string> { UserLibraryRead, UserReadEmail, UserReadPrivate, UserReadPlaybackPosition, UserReadCurrentlyPlaying, UserReadPlaybackState, UserModifyPlaybackState, AppRemoteControl, PlaylistReadPrivate } }; Uri uri = request.ToUri(); try { BrowserUtil.Open(uri); } catch (Exception) { Console.WriteLine("Unable to open URL, manually open: {0}", uri); }; }; }