Пример #1
0
        public async Task PlayContext_SpotifyUri_SpotifyApiErrorException()
        {
            // arrange
            const string userHash   = "E11AC28538A7C0A827A726DD9B30B710FC1FCAFFFE2E86FCA853AB90E7C710D2";
            const string spotifyUri = "spotify:user:palsvensson:playlist:2iL5fr6OmN8f4yoQvvuWSf";

            var http   = new HttpClient();
            var config = TestsHelper.GetLocalConfig();

            var accounts = new UserAccountsService(http, config, new MockRefreshTokenStore(userHash).Object, null);
            var api      = new PlayerApi(http, accounts);

            // act
            //try
            //{
            await api.PlayContext(userHash, spotifyUri);

            //}
            //catch (SpotifyApiErrorException ex)
            //{
            //Trace.WriteLine(ex.Message);

            //}

            // assert
        }
Пример #2
0
        public Foobar2000Watcher(IConfig config, ILog log, PlayerApi playerApi)
        {
            _config = config;
            _log = log;
            _playerApi = playerApi;

            Init();
        }
Пример #3
0
 public BitmovinApi(IBitmovinApiClientFactory apiClientFactory)
 {
     Account       = new AccountApi(apiClientFactory);
     Analytics     = new AnalyticsApi(apiClientFactory);
     Encoding      = new EncodingApi(apiClientFactory);
     General       = new GeneralApi(apiClientFactory);
     Notifications = new NotificationsApi(apiClientFactory);
     Player        = new PlayerApi(apiClientFactory);
 }
Пример #4
0
        public async Task GetCurrentPlaybackInfo_NoToken_ThrowsInvalidOperationException()
        {
            // arrange
            var http   = new HttpClient();
            var player = new PlayerApi(http);

            // act
            await player.GetCurrentPlaybackInfo();
        }
Пример #5
0
        public bool GetPlayer(string platform, string playerName)
        {
            PlayerApi playerApi = new PlayerApi(Constants.Platform);

            var player = playerApi.GetPlayerByName(platform, playerName);

            Constants.Player = player;

            return(player != null);
        }
Пример #6
0
        public void Init()
        {
            Driver.Initialize();
            _loginPageSteps = new SpotifyWebAppAutomation.Steps.LoginSteps();
            _loginPageSteps.LoginAsUser("mkrupej");

            var apiAccessData = ApiManager.GetApiAccessData();

            _api = new PlayerApi(apiAccessData.Item1, apiAccessData.Item2, apiAccessData.Item3, apiAccessData.Item4);
        }
Пример #7
0
        private Action HandlePlayerApiError(string response, Action retryAction)
        {
            return(new Action(
                       async() =>
            {
                dynamic json = JsonConvert.DeserializeObject(response);

                if ("NO_ACTIVE_DEVICE".Equals((string)json.error.reason))
                {
                    DialogResult retryResult;
                    do
                    {
                        PlayerApi playerApi = new PlayerApi()
                        {
                            AuthorizationHeader = new AuthorizationHeader(await this.RunAsync(AccessTokenTask))
                        };

                        ChooseDeviceForm chooseDeviceForm = new ChooseDeviceForm(playerApi);
                        if (chooseDeviceForm.ShowDialog(this) == DialogResult.OK)
                        {
                            await playerApi.TransferPlayback(chooseDeviceForm.SelectedDevice.Id);

                            bool isDeviceActive = false;
                            for (int i = 0; !isDeviceActive && i < 5; i++)
                            {
                                dynamic devicesJson = await playerApi.GetDevices();
                                foreach (dynamic device in devicesJson.devices)
                                {
                                    if ((string)device.id != chooseDeviceForm.SelectedDevice.Id)
                                    {
                                        continue;
                                    }

                                    isDeviceActive = device.is_active;
                                }
                            }

                            if (isDeviceActive)
                            {
                                await Task.Run(retryAction);
                                break;
                            }
                        }

                        retryResult = MessageBox.Show(
                            "Select a device to play to.",
                            "No active device",
                            MessageBoxButtons.RetryCancel,
                            MessageBoxIcon.Error);
                    }while (retryResult == DialogResult.Retry);
                }
            }));
        }
Пример #8
0
        public async Task SkipNext_UserAccessToken_NoException()
        {
            // arrange
            var    http        = new HttpClient();
            var    player      = new PlayerApi(http);
            string accessToken = await TestsHelper.GetUserAccessToken();

            await player.PlayAlbum("5mAPk4qeNqVLtNydaWbWlf", accessToken);

            // act
            await player.SkipNext(accessToken : accessToken);
        }
Пример #9
0
        public async Task Play_Paused_NoException()
        {
            // arrange
            var    http        = new HttpClient();
            var    player      = new PlayerApi(http);
            string accessToken = await TestsHelper.GetUserAccessToken();

            await player.Pause(accessToken : accessToken);

            // act
            await player.Play(accessToken : accessToken);
        }
Пример #10
0
        public async Task GetCurrentlyPlayingTrack_UserAccessToken_NoException()
        {
            // arrange
            var        http        = new HttpClient();
            IPlayerApi player      = new PlayerApi(http);
            string     accessToken = await TestsHelper.GetUserAccessToken();

            // act
            var context = await player.GetCurrentlyPlayingTrack(
                additionalTypes : new[] { "episode" },
                accessToken : accessToken);
        }
Пример #11
0
        public async Task GetRecentlyPlayedTracks_UserAccessToken_NotNull()
        {
            // arrange
            var        http        = new HttpClient();
            IPlayerApi player      = new PlayerApi(http);
            string     accessToken = await TestsHelper.GetUserAccessToken();

            // act
            var history = await player.GetRecentlyPlayedTracks(accessToken : accessToken);

            // assert
            Assert.IsNotNull(history);
        }
Пример #12
0
        public async Task Repeat_ContextOff_NoException()
        {
            // arrange
            var    http        = new HttpClient();
            var    player      = new PlayerApi(http);
            string accessToken = await TestsHelper.GetUserAccessToken();

            await player.PlayAlbum("5mAPk4qeNqVLtNydaWbWlf", accessToken);

            // act
            await player.Repeat(RepeatStates.Context, accessToken : accessToken);

            await player.Repeat(RepeatStates.Off, accessToken : accessToken);
        }
Пример #13
0
        private async Task PlayAllTracks()
        {
            List <Track> tracks    = this.dataGridViewTracks.GetAllVisibleRowTags <Track>();
            PlayerApi    playerApi = new PlayerApi()
            {
                AuthorizationHeader = new AuthorizationHeader(await this.RunAsync(this.AccessTokenTask))
            };

            await playerApi.PlayTracks(
                tracks.Select(t => t.Uri),
                errorCallback : (response) => this.HandlePlayerApiError(
                    response,
                    async() => await this.PlayAllTracks()).Invoke());
        }
Пример #14
0
        public async Task GetRecentlyPlayedTracks_GetNextPage_ItemsAny()
        {
            // arrange
            var        http        = new HttpClient();
            IPlayerApi player      = new PlayerApi(http);
            string     accessToken = await TestsHelper.GetUserAccessToken();

            // act
            var history = await player.GetRecentlyPlayedTracks(accessToken : accessToken);

            var moreHistory = await player.GetRecentlyPlayedTracks(before : history.Cursors.Before, accessToken : accessToken);

            // assert
            Assert.IsTrue(moreHistory.Items.Any());
        }
Пример #15
0
        public async Task TransferPlayback_GetDevice1IdPlayTrue_NoException()
        {
            // arrange
            var        http        = new HttpClient();
            IPlayerApi player      = new PlayerApi(http);
            string     accessToken = await TestsHelper.GetUserAccessToken();

            var devices = await player.GetDevices(accessToken : accessToken);

            // act
            if (devices.Any())
            {
                await player.TransferPlayback(devices.Last().Id, play : true, accessToken : accessToken);
            }
        }
Пример #16
0
        //[TestMethod]
        public async Task Usage2()
        {
            // Get a list of a User's devices
            // This requires User authentication and authorization.
            // A `UserAccountsService` is provided to help with this.

            // HttpClient and UserAccountsService can be reused.
            // Tokens can be cached by your code
            var http     = new HttpClient();
            var accounts = new UserAccountsService(http, TestsHelper.GetLocalConfig());

            // See https://developer.spotify.com/documentation/general/guides/authorization-guide/#authorization-code-flow
            //  for an explanation of the Authorization code flow

            // Generate a random state value to use in the Auth request
            string state = Guid.NewGuid().ToString("N");
            // Accounts service will derive the Auth URL for you
            string url = accounts.AuthorizeUrl(state, new[] { "user-read-playback-state" });

            /*
             *  Redirect the user to `url` and when they have auth'ed Spotify will redirect to your reply URL
             *  The response will include two query parameters: `state` and `code`.
             *  For a full working example see `SpotifyApi.NetCore.Samples`.
             */
            var query = new Dictionary <string, string>();

            // Check that the request has not been tampered with by checking the `state` value matches
            if (state != query["state"])
            {
                throw new ArgumentException();
            }

            // Use the User accounts service to swap `code` for a Refresh token
            BearerAccessRefreshToken token = await accounts.RequestAccessRefreshToken(query["code"]);

            // Use the Bearer (Access) Token to call the Player API
            var player = new PlayerApi(http, accounts);

            Device[] devices = await player.GetDevices(accessToken : token.AccessToken);

            foreach (Device device in devices)
            {
                Trace.WriteLine($"Device {device.Name} Status = {device.Type} Active = {device.IsActive}");
            }
        }
Пример #17
0
        public async Task <CurrentPlaybackContext> GetCurrentlyPlayingSongAsync()
        {
            try
            {
                var            http   = new HttpClient();
                IConfiguration config = new ConfigurationBuilder()
                                        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                                        .AddEnvironmentVariables()
                                        .Build();

                var player = new PlayerApi(http, AuthToken);
                return(await player.GetCurrentPlaybackInfo(AuthToken));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        //TODO: Something is up - the first error is not being thrown to the test runner...
        //[TestMethod]
        public async Task TwoCompetingUserAccessTokenRequestsGetConsistentResults()
        {
            const string userHash   = "E11AC28538A7C0A827A726DD9B30B710FC1FCAFFFE2E86FCA853AB90E7C710D2";
            const string spotifyUri = "spotify:user:palsvensson:playlist:2iL5fr6OmN8f4yoQvvuWSf";

            var store = new MockRefreshTokenStore(userHash).Object;

            var http1     = new HttpClient();
            var accounts1 = new UserAccountsService(http1, TestsHelper.GetLocalConfig(), store);
            var player1   = new PlayerApi(http1, accounts1);

            var http2     = new HttpClient();
            var accounts2 = new UserAccountsService(http2, TestsHelper.GetLocalConfig(), store);
            var player2   = new PlayerApi(http2, accounts2);

            // act
            //try
            //{
            //TODO: Call Device method instead
            await player1.PlayContext(userHash, spotifyUri);

            //}
            //catch (SpotifyApiErrorException ex)
            //{
            //Trace.WriteLine(ex.Message);
            //}

            //try
            //{
            await player2.PlayContext(userHash, spotifyUri);

            //}
            //catch (SpotifyApiErrorException ex)
            //{
            //  Trace.WriteLine(ex.Message);
            //}

            // assert
            // no error
        }
Пример #19
0
        private static void Main(string[] args)
        {
            var       apiAccessData = ApiManager.GetApiAccessData();
            PlayerApi sp            = new PlayerApi(apiAccessData.Item1, apiAccessData.Item2, apiAccessData.Item3, apiAccessData.Item4);

            sp.Pause();

            /**
             * track ids "029l68p4fPYZeAgJ5c60zR" "49X0LAl6faAusYq02PRAY6"
             *
             * SpotifyPlayerApi sp = new SpotifyPlayerApi(client_id, key, response_type, redirect_uri);
             *
             * var e = sp.SetRepeatMode(Api.Model.Enum.RepeatModeState.track);
             * var f = sp.SkipToPreviousTrack();
             *
             * PersonalizationApi sp = new PersonalizationApi(client_id, key, response_type, redirect_uri);
             * var a = sp.GetUserTopArtists();
             * var b = sp.GetUserTopTracks();
             *
             * var b = sp2.AddTrackToPlaylist("66q5xfePGHk0xf1e4HdZ3F", "spotify:track:4iV5W9uYEdYUVa79Axb7Rh,spotify:track:1301WleyT98MSxVHPZCA6M");
             * var c = sp2.RemoveTrackFromPlaylist("66q5xfePGHk0xf1e4HdZ3F", "[{ "uri": "spotify: track:4iV5W9uYEdYUVa79Axb7Rh" },{ "uri": "spotify: track: 1301WleyT98MSxVHPZCA6M" }]");
             * var a = sp2.CreatePLaylist("mkrupej", "\"testowa\"", description: "\"opis\"");
             * var b = sp2.Play("potify:album:5ht7ItJgpBH7W6vJ5BqpPr");
             *
             * var b = sp2.SeekToPostion(12000);
             *
             * var g = sp2.SetVolume(20);
             * var k = sp2.ShuffleUserPlayback();
             *
             * sp2.GetTracks("11dFghVXANMlKmJXsNCbNl");
             * sp2.GetTracks("11dFghVXANMlKmJXsNCbNl");
             * sp2.GetSeveralTracks("11dFghVXANMlKmJXsNCbNl,49X0LAl6faAusYq02PRAY6");
             *          sp2.ChangePlaylistDetails("66q5xfePGHk0xf1e4HdZ3F", "\"zmiananazwy\"");
             *
             * var a = sp2.GetSeveralTracks("11dFghVXANMlKmJXsNCbNl,3n3Ppam7vgaVa1iaRUc9Lp"); **/
            //var a = sp2.DeleteTrackForCurrentUser("7ouMYWpwJ422jRcDASZB7P,4VqPOruhp5EdPBeR92t6lQ,2takcwOaAZWiXQijPHIx7B");

            // var sp2 = new SearchApi(client_id, key, response_type, redirect_uri);
            //var s = sp2.Search("U2", searchType: SearchType.album | SearchType.artist);
        }
Пример #20
0
        private async Task PlaySelectedPlaylist()
        {
            List <Playlist> playlists = this.dataGridViewPlaylists.GetSelectedRowTags <Playlist>();

            if (playlists.Count != 1)
            {
                return;
            }

            Playlist playlist = playlists.Single();

            PlayerApi playerApi = new PlayerApi()
            {
                AuthorizationHeader = new AuthorizationHeader(await this.RunAsync(this.AccessTokenTask))
            };

            await playerApi.PlayPlaylist(
                playlist.Uri,
                errorCallback : (response) => this.HandlePlayerApiError(
                    response,
                    async() => await this.PlaySelectedPlaylist()).Invoke());
        }
Пример #21
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ChooseDeviceForm"/> class
        /// </summary>
        /// <param name="playerApi">The Player API</param>
        public ChooseDeviceForm(PlayerApi playerApi)
        {
            this.InitializeComponent();

            this.playerApi = playerApi;
        }
Пример #22
0
 public void Init()
 {
     instance = new PlayerApi();
 }
Пример #23
0
        public async Task ReorderPlaylist(IPlaylist playlist, Room room, RoomSong song)
        {
            CurrentPlaybackContext currentPlayback = null;

            try
            {
                var            http   = new HttpClient();
                IConfiguration config = new ConfigurationBuilder()
                                        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                                        .AddEnvironmentVariables()
                                        .Build();

                var player = new PlayerApi(http, AuthToken);
                currentPlayback = await player.GetCurrentPlaybackInfo(AuthToken);
            }
            catch (Exception ex)
            {
            }

            try
            {
                var client = new RestClient(@"https://api.spotify.com/v1");
                client.Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator($"Bearer {AuthToken}");
                var request = new RestRequest($@"playlists/{playlist.PlaylistID}/tracks", Method.PUT);
                request.RequestFormat = DataFormat.Json;
                if (song != null)
                {
                    room.RoomSongs.SingleOrDefault(s => s.SongId == song.SongId).SongRating -= 1;
                }
                var spotifyUris = room.RoomSongs
                                  .OrderByDescending(s => s.SongRating)
                                  .Select(s => s.Song.SpotifyId)
                                  .ToList();
                if (currentPlayback != null && spotifyUris.Any(s => s == currentPlayback.Item.Uri))
                {
                    // Reorder songs, only after the current one we are playing.
                    // This ensures that if you're in the middle of a playlist,
                    // the next song you listen to is the highest rated song
                    for (int i = 0; i < spotifyUris.Count; ++i)
                    {
                        if (spotifyUris[0] == currentPlayback.Item.Uri)
                        {
                            break;
                        }
                        spotifyUris.Remove(spotifyUris[0]);
                    }
                }
                else
                {
                    spotifyUris = room.RoomSongs
                                  .OrderByDescending(s => s.SongRating)
                                  .Select(s => s.Song.SpotifyId)
                                  .ToList();
                }

                request.AddJsonBody(new { uris = spotifyUris });

                var response = await client.ExecuteTaskAsync(request);

                var content = response.Content;
            }
            catch (Exception ex)
            {
            }
        }
Пример #24
0
 // only used for manual debugging
 public async Task ControllerAuthorize3()
 {
     // AuthService provides access token to APIs, refreshes when necessary, updates userAuth record
     var player = new PlayerApi(new HttpClient(), _accounts);
     await player.PlayContext("", "");
 }
Пример #25
0
 void Awake()
 {
     instance = this;
 }
Пример #26
0
 void Awake()
 {
     instance = this;
 }