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; }
}
}