Пример #1
0
        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;
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
                };
            };
        }