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 }
public Foobar2000Watcher(IConfig config, ILog log, PlayerApi playerApi) { _config = config; _log = log; _playerApi = playerApi; Init(); }
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); }
public async Task GetCurrentPlaybackInfo_NoToken_ThrowsInvalidOperationException() { // arrange var http = new HttpClient(); var player = new PlayerApi(http); // act await player.GetCurrentPlaybackInfo(); }
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); }
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); }
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); } })); }
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); }
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); }
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); }
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); }
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); }
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()); }
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()); }
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); } }
//[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}"); } }
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 }
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); }
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()); }
/// <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; }
public void Init() { instance = new PlayerApi(); }
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) { } }
// 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("", ""); }
void Awake() { instance = this; }
void Awake() { instance = this; }