From ce130b63f1d273946bf2f2007f76d6e255f020d0 Mon Sep 17 00:00:00 2001 From: DEV-PBO-DEV <72922549+DEV-PBO-DEV@users.noreply.github.com> Date: Fri, 7 May 2021 11:00:57 +0200 Subject: [PATCH 1/4] Fixing #607 + Refactoring Added me/episodes and done some refactoring --- .../Clients/Interfaces/ILibraryClient.cs | 51 +++++++ SpotifyAPI.Web/Clients/LibraryClient.cs | 35 +++++ .../Request/LibraryCheckEpisodesRequest.cs | 25 ++++ .../Models/Request/LibraryEpisodesRequest.cs | 20 +++ .../Request/LibraryRemoveEpisodesRequest.cs | 27 ++++ .../Request/LibrarySaveEpisodesRequest.cs | 25 ++++ .../AuthorizationCodeTokenResponse.cs | 1 - .../Models/Response/CurrentlyPlaying.cs | 1 - SpotifyAPI.Web/Models/Response/PrivateUser.cs | 1 - SpotifyAPI.Web/Models/Response/PublicUser.cs | 1 - .../Models/Response/SavedEpisodes.cs | 10 ++ SpotifyAPI.Web/SpotifyUrls.cs | 4 + SpotifyAPI.Web/SpotifyUrls.cs.bak | 130 ++++++++++++++++++ 13 files changed, 327 insertions(+), 4 deletions(-) create mode 100644 SpotifyAPI.Web/Models/Request/LibraryCheckEpisodesRequest.cs create mode 100644 SpotifyAPI.Web/Models/Request/LibraryEpisodesRequest.cs create mode 100644 SpotifyAPI.Web/Models/Request/LibraryRemoveEpisodesRequest.cs create mode 100644 SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs create mode 100644 SpotifyAPI.Web/Models/Response/SavedEpisodes.cs create mode 100644 SpotifyAPI.Web/SpotifyUrls.cs.bak diff --git a/SpotifyAPI.Web/Clients/Interfaces/ILibraryClient.cs b/SpotifyAPI.Web/Clients/Interfaces/ILibraryClient.cs index 5e84d35d9..1e5910059 100644 --- a/SpotifyAPI.Web/Clients/Interfaces/ILibraryClient.cs +++ b/SpotifyAPI.Web/Clients/Interfaces/ILibraryClient.cs @@ -39,6 +39,16 @@ public interface ILibraryClient /// Task RemoveShows(LibraryRemoveShowsRequest request); + /// + /// Delete one or more episodes from current Spotify user’s library. + /// + /// The request-model which contains required and optional parameters. + /// + /// https://developer.spotify.com/documentation/web-api/reference/#endpoint-remove-episodes-user + /// + /// + Task RemoveEpisodes(LibraryRemoveEpisodesRequest request); + /// /// Save one or more tracks to the current user’s ‘Your Music’ library. /// @@ -69,6 +79,16 @@ public interface ILibraryClient /// Task SaveShows(LibrarySaveShowsRequest request); + /// + /// Save one or more episodes to current Spotify user’s library. + /// + /// The request-model which contains required and optional parameters. + /// + /// https://developer.spotify.com/documentation/web-api/reference/#endpoint-save-episodes-user + /// + /// + Task SaveEpisodes(LibrarySaveEpisodesRequest request); + /// /// Check if one or more tracks is already saved in the current Spotify user’s ‘Your Music’ library. /// @@ -99,6 +119,16 @@ public interface ILibraryClient /// Task> CheckShows(LibraryCheckShowsRequest request); + /// + /// Check if one or more episodes is already saved in the current Spotify user’s library. + /// + /// The request-model which contains required and optional parameters. + /// + /// https://developer.spotify.com/documentation/web-api/reference/#endpoint-check-users-saved-episodes + /// + /// + Task> CheckEpisodes(LibraryCheckEpisodesRequest request); + /// /// Get a list of the songs saved in the current Spotify user’s ‘Your Music’ library. /// @@ -157,5 +187,26 @@ public interface ILibraryClient /// /// Task> GetShows(LibraryShowsRequest request); + + /// + /// Get a list of episodes saved in the current Spotify user’s library. + /// Optional parameters can be used to limit the number of shows returned. + /// + /// + /// https://developer.spotify.com/documentation/web-api/reference/#endpoint-get-users-saved-episodes + /// + /// + Task> GetEpisodes(); + + /// + /// Get a list of episodes saved in the current Spotify user’s library. + /// Optional parameters can be used to limit the number of shows returned. + /// + /// The request-model which contains required and optional parameters. + /// + /// https://developer.spotify.com/documentation/web-api/reference/#endpoint-get-users-saved-episodes + /// + /// + Task> GetEpisodes(LibraryEpisodesRequest request); } } diff --git a/SpotifyAPI.Web/Clients/LibraryClient.cs b/SpotifyAPI.Web/Clients/LibraryClient.cs index 7c8639f40..b279eb479 100644 --- a/SpotifyAPI.Web/Clients/LibraryClient.cs +++ b/SpotifyAPI.Web/Clients/LibraryClient.cs @@ -30,6 +30,13 @@ public Task> CheckTracks(LibraryCheckTracksRequest request) return API.Get>(SpotifyUrls.LibraryTracksContains(), request.BuildQueryParams()); } + public Task> CheckEpisodes(LibraryCheckEpisodesRequest request) + { + Ensure.ArgumentNotNull(request, nameof(request)); + + return API.Get>(SpotifyUrls.LibraryEpisodesContains(), request.BuildQueryParams()); + } + public Task> GetAlbums() { return API.Get>(SpotifyUrls.LibraryAlbums()); @@ -66,6 +73,18 @@ public Task> GetTracks(LibraryTracksRequest request) return API.Get>(SpotifyUrls.LibraryTracks(), request.BuildQueryParams()); } + public Task> GetEpisodes() + { + return API.Get>(SpotifyUrls.LibraryEpisodes()); + } + + public Task> GetEpisodes(LibraryEpisodesRequest request) + { + Ensure.ArgumentNotNull(request, nameof(request)); + + return API.Get>(SpotifyUrls.LibraryEpisodes(), request.BuildQueryParams()); + } + public async Task RemoveAlbums(LibraryRemoveAlbumsRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); @@ -90,6 +109,14 @@ public async Task RemoveTracks(LibraryRemoveTracksRequest request) return statusCode == HttpStatusCode.OK; } + public async Task RemoveEpisodes(LibraryRemoveEpisodesRequest request) + { + Ensure.ArgumentNotNull(request, nameof(request)); + + var statusCode = await API.Delete(SpotifyUrls.LibraryEpisodes(), null, request.BuildBodyParams()).ConfigureAwait(false); + return statusCode == HttpStatusCode.OK; + } + public async Task SaveAlbums(LibrarySaveAlbumsRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); @@ -113,5 +140,13 @@ public async Task SaveTracks(LibrarySaveTracksRequest request) var statusCode = await API.Put(SpotifyUrls.LibraryTracks(), request.BuildQueryParams(), null).ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } + + public async Task SaveEpisodes(LibrarySaveEpisodesRequest request) + { + Ensure.ArgumentNotNull(request, nameof(request)); + + var statusCode = await API.Put(SpotifyUrls.LibraryEpisodes(), request.BuildQueryParams(), null).ConfigureAwait(false); + return statusCode == HttpStatusCode.OK; + } } } diff --git a/SpotifyAPI.Web/Models/Request/LibraryCheckEpisodesRequest.cs b/SpotifyAPI.Web/Models/Request/LibraryCheckEpisodesRequest.cs new file mode 100644 index 000000000..adc113d1a --- /dev/null +++ b/SpotifyAPI.Web/Models/Request/LibraryCheckEpisodesRequest.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; + +namespace SpotifyAPI.Web +{ + public class LibraryCheckEpisodesRequest : RequestParams + { + /// + /// + /// + /// A comma-separated list of the Spotify IDs for the shows. Maximum: 50 ids. + public LibraryCheckEpisodesRequest(IList ids) + { + Ensure.ArgumentNotNull(ids, nameof(ids)); + + Ids = ids; + } + + /// + /// A comma-separated list of the Spotify IDs for the shows. Maximum: 50 ids. + /// + /// + [QueryParam("ids")] + public IList Ids { get; } + } +} diff --git a/SpotifyAPI.Web/Models/Request/LibraryEpisodesRequest.cs b/SpotifyAPI.Web/Models/Request/LibraryEpisodesRequest.cs new file mode 100644 index 000000000..6603719ca --- /dev/null +++ b/SpotifyAPI.Web/Models/Request/LibraryEpisodesRequest.cs @@ -0,0 +1,20 @@ +namespace SpotifyAPI.Web +{ + public class LibraryEpisodesRequest : RequestParams + { + /// + /// The maximum number of episodes to return. Default: 20. Minimum: 1. Maximum: 50 + /// + /// + [QueryParam("limit")] + public int? Limit { get; set; } + + /// + /// The index of the first episode to return. Default: 0 (the first object). + /// Use with limit to get the next set of episodes. + /// + /// + [QueryParam("offset")] + public int? Offset { get; set; } + } +} diff --git a/SpotifyAPI.Web/Models/Request/LibraryRemoveEpisodesRequest.cs b/SpotifyAPI.Web/Models/Request/LibraryRemoveEpisodesRequest.cs new file mode 100644 index 000000000..f0b5d070e --- /dev/null +++ b/SpotifyAPI.Web/Models/Request/LibraryRemoveEpisodesRequest.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; + +namespace SpotifyAPI.Web +{ + public class LibraryRemoveEpisodesRequest : RequestParams + { + /// + /// + /// + /// + /// A comma-separated list of Spotify IDs for the shows to be deleted from the user’s library. + /// + public LibraryRemoveEpisodesRequest(IList ids) + { + Ensure.ArgumentNotNullOrEmptyList(ids, nameof(ids)); + + Ids = ids; + } + + /// + /// A comma-separated list of Spotify IDs for the shows to be deleted from the user’s library. + /// + /// + [BodyParam("ids")] + public IList Ids { get; } + } +} diff --git a/SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs b/SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs new file mode 100644 index 000000000..cb132c947 --- /dev/null +++ b/SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; + +namespace SpotifyAPI.Web +{ + public class LibrarySaveEpisodesRequest : RequestParams + { + /// + /// + /// + /// A comma-separated list of Spotify IDs for the shows to be added to the user’s library. + public LibrarySaveEpisodesRequest(IList ids) + { + Ensure.ArgumentNotNullOrEmptyList(ids, nameof(ids)); + + Ids = ids; + } + + /// + /// A comma-separated list of Spotify IDs for the shows to be added to the user’s library. + /// + /// + [QueryParam("ids")] + public IList Ids { get; } + } +} diff --git a/SpotifyAPI.Web/Models/Response/AuthorizationCodeTokenResponse.cs b/SpotifyAPI.Web/Models/Response/AuthorizationCodeTokenResponse.cs index 05cea2a3d..3c7f58745 100644 --- a/SpotifyAPI.Web/Models/Response/AuthorizationCodeTokenResponse.cs +++ b/SpotifyAPI.Web/Models/Response/AuthorizationCodeTokenResponse.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; namespace SpotifyAPI.Web { diff --git a/SpotifyAPI.Web/Models/Response/CurrentlyPlaying.cs b/SpotifyAPI.Web/Models/Response/CurrentlyPlaying.cs index e39fd6ef1..03b49536b 100644 --- a/SpotifyAPI.Web/Models/Response/CurrentlyPlaying.cs +++ b/SpotifyAPI.Web/Models/Response/CurrentlyPlaying.cs @@ -1,4 +1,3 @@ -using System; using Newtonsoft.Json; namespace SpotifyAPI.Web diff --git a/SpotifyAPI.Web/Models/Response/PrivateUser.cs b/SpotifyAPI.Web/Models/Response/PrivateUser.cs index 7995df492..a286bd001 100644 --- a/SpotifyAPI.Web/Models/Response/PrivateUser.cs +++ b/SpotifyAPI.Web/Models/Response/PrivateUser.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using Newtonsoft.Json; namespace SpotifyAPI.Web { diff --git a/SpotifyAPI.Web/Models/Response/PublicUser.cs b/SpotifyAPI.Web/Models/Response/PublicUser.cs index b7d0cffe4..b8aa6cb67 100644 --- a/SpotifyAPI.Web/Models/Response/PublicUser.cs +++ b/SpotifyAPI.Web/Models/Response/PublicUser.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using Newtonsoft.Json; namespace SpotifyAPI.Web { diff --git a/SpotifyAPI.Web/Models/Response/SavedEpisodes.cs b/SpotifyAPI.Web/Models/Response/SavedEpisodes.cs new file mode 100644 index 000000000..5e27b30e1 --- /dev/null +++ b/SpotifyAPI.Web/Models/Response/SavedEpisodes.cs @@ -0,0 +1,10 @@ +using System; + +namespace SpotifyAPI.Web +{ + public class SavedEpisodes + { + public DateTime AddedAt { get; set; } + public FullEpisode Episode { get; set; } = default!; + } +} diff --git a/SpotifyAPI.Web/SpotifyUrls.cs b/SpotifyAPI.Web/SpotifyUrls.cs index b41364c40..bb548c8d2 100644 --- a/SpotifyAPI.Web/SpotifyUrls.cs +++ b/SpotifyAPI.Web/SpotifyUrls.cs @@ -125,6 +125,10 @@ public static class SpotifyUrls public static Uri LibraryShows() => EUri($"me/shows"); + public static Uri LibraryEpisodes() => EUri($"me/episodes"); + + public static Uri LibraryEpisodesContains() => EUri($"me/episodes/contains"); + private static Uri EUri(FormattableString path) => new(path.ToString(_provider), UriKind.Relative); } } diff --git a/SpotifyAPI.Web/SpotifyUrls.cs.bak b/SpotifyAPI.Web/SpotifyUrls.cs.bak new file mode 100644 index 000000000..b41364c40 --- /dev/null +++ b/SpotifyAPI.Web/SpotifyUrls.cs.bak @@ -0,0 +1,130 @@ +using System; +namespace SpotifyAPI.Web +{ + public static class SpotifyUrls + { + static private readonly URIParameterFormatProvider _provider = new(); + + public static readonly Uri APIV1 = new("https://api.spotify.com/v1/"); + + public static readonly Uri Authorize = new("https://accounts.spotify.com/authorize"); + + public static readonly Uri OAuthToken = new("https://accounts.spotify.com/api/token"); + + public static Uri Me() => EUri($"me"); + + public static Uri User(string userId) => EUri($"users/{userId}"); + + public static Uri Categories() => EUri($"browse/categories"); + + public static Uri Category(string categoryId) => EUri($"browse/categories/{categoryId}"); + + public static Uri CategoryPlaylists(string categoryId) => EUri($"browse/categories/{categoryId}/playlists"); + + public static Uri Recommendations() => EUri($"recommendations"); + + public static Uri RecommendationGenres() => EUri($"recommendations/available-genre-seeds"); + + public static Uri NewReleases() => EUri($"browse/new-releases"); + + public static Uri FeaturedPlaylists() => EUri($"browse/featured-playlists"); + + public static Uri Show(string showId) => EUri($"shows/{showId}"); + + public static Uri Shows() => EUri($"shows"); + + public static Uri ShowEpisodes(string showId) => EUri($"shows/{showId}/episodes"); + + public static Uri PlaylistTracks(string playlistId) => EUri($"playlists/{playlistId}/tracks"); + + public static Uri UserPlaylists(string userId) => EUri($"users/{userId}/playlists"); + + public static Uri PlaylistImages(string playlistId) => EUri($"playlists/{playlistId}/images"); + + public static Uri Playlist(string playlistId) => EUri($"playlists/{playlistId}"); + + public static Uri CurrentUserPlaylists() => EUri($"me/playlists"); + + public static Uri Search() => EUri($"search"); + + public static Uri CurrentUserFollowerContains() => EUri($"me/following/contains"); + + public static Uri PlaylistFollowersContains(string playlistId) => EUri($"playlists/{playlistId}/followers/contains"); + + public static Uri CurrentUserFollower() => EUri($"me/following"); + + public static Uri PlaylistFollowers(string playlistId) => EUri($"playlists/{playlistId}/followers"); + + public static Uri Tracks() => EUri($"tracks"); + + public static Uri Track(string trackId) => EUri($"tracks/{trackId}"); + + public static Uri AudioAnalysis(string trackId) => EUri($"audio-analysis/{trackId}"); + + public static Uri AudioFeatures(string trackId) => EUri($"audio-features/{trackId}"); + + public static Uri AudioFeatures() => EUri($"audio-features"); + + public static Uri Player() => EUri($"me/player"); + + public static Uri PlayerQueue() => EUri($"me/player/queue"); + + public static Uri PlayerDevices() => EUri($"me/player/devices"); + + public static Uri PlayerCurrentlyPlaying() => EUri($"me/player/currently-playing"); + + public static Uri PlayerRecentlyPlayed() => EUri($"me/player/recently-played"); + + public static Uri PlayerPause() => EUri($"me/player/pause"); + + public static Uri PlayerResume() => EUri($"me/player/play"); + + public static Uri PlayerSeek() => EUri($"me/player/seek"); + + public static Uri PlayerRepeat() => EUri($"me/player/repeat"); + + public static Uri PlayerShuffle() => EUri($"me/player/shuffle"); + + public static Uri PlayerVolume() => EUri($"me/player/volume"); + + public static Uri PlayerNext() => EUri($"me/player/next"); + + public static Uri PlayerPrevious() => EUri($"me/player/previous"); + + public static Uri Albums() => EUri($"albums"); + + public static Uri Album(string albumId) => EUri($"albums/{albumId}"); + + public static Uri AlbumTracks(string albumId) => EUri($"albums/{albumId}/tracks"); + + public static Uri Artists() => EUri($"artists"); + + public static Uri Artist(string artistId) => EUri($"artists/{artistId}"); + + public static Uri ArtistAlbums(string artistId) => EUri($"artists/{artistId}/albums"); + + public static Uri ArtistTopTracks(string artistId) => EUri($"artists/{artistId}/top-tracks"); + + public static Uri ArtistRelatedArtists(string artistId) => EUri($"artists/{artistId}/related-artists"); + + public static Uri PersonalizationTop(string type) => EUri($"me/top/{type}"); + + public static Uri Episode(string episodeId) => EUri($"episodes/{episodeId}"); + + public static Uri Episodes() => EUri($"episodes"); + + public static Uri LibraryAlbumsContains() => EUri($"me/albums/contains"); + + public static Uri LibraryAlbums() => EUri($"me/albums"); + + public static Uri LibraryTracksContains() => EUri($"me/tracks/contains"); + + public static Uri LibraryTracks() => EUri($"me/tracks"); + + public static Uri LibraryShowsContains() => EUri($"me/shows/contains"); + + public static Uri LibraryShows() => EUri($"me/shows"); + + private static Uri EUri(FormattableString path) => new(path.ToString(_provider), UriKind.Relative); + } +} From b14643c44127f4d327d885be28116150decf889a Mon Sep 17 00:00:00 2001 From: DEV-PBO-DEV <72922549+DEV-PBO-DEV@users.noreply.github.com> Date: Sat, 8 May 2021 12:03:15 +0200 Subject: [PATCH 2/4] Fixing LibrarySaveEpisodesRequest #607 Fixing the remove of epsides. --- .../Models/Request/LibrarySaveEpisodesRequest.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs b/SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs index cb132c947..b825065d0 100644 --- a/SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs +++ b/SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs @@ -7,19 +7,19 @@ public class LibrarySaveEpisodesRequest : RequestParams /// /// /// - /// A comma-separated list of Spotify IDs for the shows to be added to the user’s library. - public LibrarySaveEpisodesRequest(IList ids) + /// A comma-separated list of Spotify URIs for the shows to be added to the user’s library. + public LibrarySaveEpisodesRequest(IList uris) { - Ensure.ArgumentNotNullOrEmptyList(ids, nameof(ids)); + Ensure.ArgumentNotNullOrEmptyList(uris, nameof(uris)); - Ids = ids; + URIs = uris; } /// - /// A comma-separated list of Spotify IDs for the shows to be added to the user’s library. + /// A comma-separated list of Spotify URIs for the shows to be added to the user’s library. /// /// - [QueryParam("ids")] - public IList Ids { get; } + [QueryParam("uRIs")] + public IList URIs { get; } } } From 1624e90d971ea3e1a493de04116717154a889085 Mon Sep 17 00:00:00 2001 From: DEV-PBO-DEV <72922549+DEV-PBO-DEV@users.noreply.github.com> Date: Mon, 10 May 2021 08:50:14 +0200 Subject: [PATCH 3/4] Fixed some issues after review #608 --- .../Request/LibrarySaveEpisodesRequest.cs | 2 +- SpotifyAPI.Web/SpotifyUrls.cs.bak | 130 ------------------ 2 files changed, 1 insertion(+), 131 deletions(-) delete mode 100644 SpotifyAPI.Web/SpotifyUrls.cs.bak diff --git a/SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs b/SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs index b825065d0..cda1c0f1a 100644 --- a/SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs +++ b/SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs @@ -19,7 +19,7 @@ public LibrarySaveEpisodesRequest(IList uris) /// A comma-separated list of Spotify URIs for the shows to be added to the user’s library. /// /// - [QueryParam("uRIs")] + [QueryParam("uris")] public IList URIs { get; } } } diff --git a/SpotifyAPI.Web/SpotifyUrls.cs.bak b/SpotifyAPI.Web/SpotifyUrls.cs.bak deleted file mode 100644 index b41364c40..000000000 --- a/SpotifyAPI.Web/SpotifyUrls.cs.bak +++ /dev/null @@ -1,130 +0,0 @@ -using System; -namespace SpotifyAPI.Web -{ - public static class SpotifyUrls - { - static private readonly URIParameterFormatProvider _provider = new(); - - public static readonly Uri APIV1 = new("https://api.spotify.com/v1/"); - - public static readonly Uri Authorize = new("https://accounts.spotify.com/authorize"); - - public static readonly Uri OAuthToken = new("https://accounts.spotify.com/api/token"); - - public static Uri Me() => EUri($"me"); - - public static Uri User(string userId) => EUri($"users/{userId}"); - - public static Uri Categories() => EUri($"browse/categories"); - - public static Uri Category(string categoryId) => EUri($"browse/categories/{categoryId}"); - - public static Uri CategoryPlaylists(string categoryId) => EUri($"browse/categories/{categoryId}/playlists"); - - public static Uri Recommendations() => EUri($"recommendations"); - - public static Uri RecommendationGenres() => EUri($"recommendations/available-genre-seeds"); - - public static Uri NewReleases() => EUri($"browse/new-releases"); - - public static Uri FeaturedPlaylists() => EUri($"browse/featured-playlists"); - - public static Uri Show(string showId) => EUri($"shows/{showId}"); - - public static Uri Shows() => EUri($"shows"); - - public static Uri ShowEpisodes(string showId) => EUri($"shows/{showId}/episodes"); - - public static Uri PlaylistTracks(string playlistId) => EUri($"playlists/{playlistId}/tracks"); - - public static Uri UserPlaylists(string userId) => EUri($"users/{userId}/playlists"); - - public static Uri PlaylistImages(string playlistId) => EUri($"playlists/{playlistId}/images"); - - public static Uri Playlist(string playlistId) => EUri($"playlists/{playlistId}"); - - public static Uri CurrentUserPlaylists() => EUri($"me/playlists"); - - public static Uri Search() => EUri($"search"); - - public static Uri CurrentUserFollowerContains() => EUri($"me/following/contains"); - - public static Uri PlaylistFollowersContains(string playlistId) => EUri($"playlists/{playlistId}/followers/contains"); - - public static Uri CurrentUserFollower() => EUri($"me/following"); - - public static Uri PlaylistFollowers(string playlistId) => EUri($"playlists/{playlistId}/followers"); - - public static Uri Tracks() => EUri($"tracks"); - - public static Uri Track(string trackId) => EUri($"tracks/{trackId}"); - - public static Uri AudioAnalysis(string trackId) => EUri($"audio-analysis/{trackId}"); - - public static Uri AudioFeatures(string trackId) => EUri($"audio-features/{trackId}"); - - public static Uri AudioFeatures() => EUri($"audio-features"); - - public static Uri Player() => EUri($"me/player"); - - public static Uri PlayerQueue() => EUri($"me/player/queue"); - - public static Uri PlayerDevices() => EUri($"me/player/devices"); - - public static Uri PlayerCurrentlyPlaying() => EUri($"me/player/currently-playing"); - - public static Uri PlayerRecentlyPlayed() => EUri($"me/player/recently-played"); - - public static Uri PlayerPause() => EUri($"me/player/pause"); - - public static Uri PlayerResume() => EUri($"me/player/play"); - - public static Uri PlayerSeek() => EUri($"me/player/seek"); - - public static Uri PlayerRepeat() => EUri($"me/player/repeat"); - - public static Uri PlayerShuffle() => EUri($"me/player/shuffle"); - - public static Uri PlayerVolume() => EUri($"me/player/volume"); - - public static Uri PlayerNext() => EUri($"me/player/next"); - - public static Uri PlayerPrevious() => EUri($"me/player/previous"); - - public static Uri Albums() => EUri($"albums"); - - public static Uri Album(string albumId) => EUri($"albums/{albumId}"); - - public static Uri AlbumTracks(string albumId) => EUri($"albums/{albumId}/tracks"); - - public static Uri Artists() => EUri($"artists"); - - public static Uri Artist(string artistId) => EUri($"artists/{artistId}"); - - public static Uri ArtistAlbums(string artistId) => EUri($"artists/{artistId}/albums"); - - public static Uri ArtistTopTracks(string artistId) => EUri($"artists/{artistId}/top-tracks"); - - public static Uri ArtistRelatedArtists(string artistId) => EUri($"artists/{artistId}/related-artists"); - - public static Uri PersonalizationTop(string type) => EUri($"me/top/{type}"); - - public static Uri Episode(string episodeId) => EUri($"episodes/{episodeId}"); - - public static Uri Episodes() => EUri($"episodes"); - - public static Uri LibraryAlbumsContains() => EUri($"me/albums/contains"); - - public static Uri LibraryAlbums() => EUri($"me/albums"); - - public static Uri LibraryTracksContains() => EUri($"me/tracks/contains"); - - public static Uri LibraryTracks() => EUri($"me/tracks"); - - public static Uri LibraryShowsContains() => EUri($"me/shows/contains"); - - public static Uri LibraryShows() => EUri($"me/shows"); - - private static Uri EUri(FormattableString path) => new(path.ToString(_provider), UriKind.Relative); - } -} From 62e4908efb8c8b84c9610582589f3575495cb6b0 Mon Sep 17 00:00:00 2001 From: DEV-PBO-DEV <72922549+DEV-PBO-DEV@users.noreply.github.com> Date: Mon, 14 Jun 2021 14:56:14 +0200 Subject: [PATCH 4/4] Fixing some small issues --- .../Models/Request/LibraryEpisodesRequest.cs | 8 ++++++++ .../Request/LibrarySaveEpisodesRequest.cs | 17 +++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/SpotifyAPI.Web/Models/Request/LibraryEpisodesRequest.cs b/SpotifyAPI.Web/Models/Request/LibraryEpisodesRequest.cs index 6603719ca..933c9eccc 100644 --- a/SpotifyAPI.Web/Models/Request/LibraryEpisodesRequest.cs +++ b/SpotifyAPI.Web/Models/Request/LibraryEpisodesRequest.cs @@ -16,5 +16,13 @@ public class LibraryEpisodesRequest : RequestParams /// [QueryParam("offset")] public int? Offset { get; set; } + + /// + /// An ISO 3166-1 alpha-2 country code or the string from_token. + /// Provide this parameter if you want to apply Track Relinking. + /// + /// + [QueryParam("market")] + public string? Market { get; set; } } } diff --git a/SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs b/SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs index cda1c0f1a..89e3dff80 100644 --- a/SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs +++ b/SpotifyAPI.Web/Models/Request/LibrarySaveEpisodesRequest.cs @@ -5,21 +5,22 @@ namespace SpotifyAPI.Web public class LibrarySaveEpisodesRequest : RequestParams { /// - /// + /// Request for SaveEpisodes. /// - /// A comma-separated list of Spotify URIs for the shows to be added to the user’s library. - public LibrarySaveEpisodesRequest(IList uris) + /// + public LibrarySaveEpisodesRequest(IList ids) { - Ensure.ArgumentNotNullOrEmptyList(uris, nameof(uris)); + Ensure.ArgumentNotNullOrEmptyList(ids, nameof(ids)); - URIs = uris; + Ids = ids; } /// - /// A comma-separated list of Spotify URIs for the shows to be added to the user’s library. + /// A comma-separated list of the Spotify IDs. + /// Maximum: 50 IDs. /// /// - [QueryParam("uris")] - public IList URIs { get; } + [QueryParam("ids")] + public IList Ids { get; } } }