Skip to content

Commit c4704ab

Browse files
p-bojkowskiDEV-PBO-DEV
and
DEV-PBO-DEV
authored
Fixing #607 + Refactoring (#608)
* Fixing #607 + Refactoring Added me/episodes and done some refactoring * Fixing LibrarySaveEpisodesRequest #607 Fixing the remove of epsides. * Fixed some issues after review #608 * Fixing some small issues Co-authored-by: DEV-PBO-DEV <72922549+DEV-PBO-DEV@users.noreply.github.com>
1 parent 8573070 commit c4704ab

12 files changed

+206
-4
lines changed

SpotifyAPI.Web/Clients/Interfaces/ILibraryClient.cs

+51
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,16 @@ public interface ILibraryClient
3939
/// <returns></returns>
4040
Task<bool> RemoveShows(LibraryRemoveShowsRequest request);
4141

42+
/// <summary>
43+
/// Delete one or more episodes from current Spotify user’s library.
44+
/// </summary>
45+
/// <param name="request">The request-model which contains required and optional parameters.</param>
46+
/// <remarks>
47+
/// https://developer.spotify.com/documentation/web-api/reference/#endpoint-remove-episodes-user
48+
/// </remarks>
49+
/// <returns></returns>
50+
Task<bool> RemoveEpisodes(LibraryRemoveEpisodesRequest request);
51+
4252
/// <summary>
4353
/// Save one or more tracks to the current user’s ‘Your Music’ library.
4454
/// </summary>
@@ -69,6 +79,16 @@ public interface ILibraryClient
6979
/// <returns></returns>
7080
Task<bool> SaveShows(LibrarySaveShowsRequest request);
7181

82+
/// <summary>
83+
/// Save one or more episodes to current Spotify user’s library.
84+
/// </summary>
85+
/// <param name="request">The request-model which contains required and optional parameters.</param>
86+
/// <remarks>
87+
/// https://developer.spotify.com/documentation/web-api/reference/#endpoint-save-episodes-user
88+
/// </remarks>
89+
/// <returns></returns>
90+
Task<bool> SaveEpisodes(LibrarySaveEpisodesRequest request);
91+
7292
/// <summary>
7393
/// Check if one or more tracks is already saved in the current Spotify user’s ‘Your Music’ library.
7494
/// </summary>
@@ -99,6 +119,16 @@ public interface ILibraryClient
99119
/// <returns></returns>
100120
Task<List<bool>> CheckShows(LibraryCheckShowsRequest request);
101121

122+
/// <summary>
123+
/// Check if one or more episodes is already saved in the current Spotify user’s library.
124+
/// </summary>
125+
/// <param name="request">The request-model which contains required and optional parameters.</param>
126+
/// <remarks>
127+
/// https://developer.spotify.com/documentation/web-api/reference/#endpoint-check-users-saved-episodes
128+
/// </remarks>
129+
/// <returns></returns>
130+
Task<List<bool>> CheckEpisodes(LibraryCheckEpisodesRequest request);
131+
102132
/// <summary>
103133
/// Get a list of the songs saved in the current Spotify user’s ‘Your Music’ library.
104134
/// </summary>
@@ -157,5 +187,26 @@ public interface ILibraryClient
157187
/// </remarks>
158188
/// <returns></returns>
159189
Task<Paging<SavedShow>> GetShows(LibraryShowsRequest request);
190+
191+
/// <summary>
192+
/// Get a list of episodes saved in the current Spotify user’s library.
193+
/// Optional parameters can be used to limit the number of shows returned.
194+
/// </summary>
195+
/// <remarks>
196+
/// https://developer.spotify.com/documentation/web-api/reference/#endpoint-get-users-saved-episodes
197+
/// </remarks>
198+
/// <returns></returns>
199+
Task<Paging<SavedEpisodes>> GetEpisodes();
200+
201+
/// <summary>
202+
/// Get a list of episodes saved in the current Spotify user’s library.
203+
/// Optional parameters can be used to limit the number of shows returned.
204+
/// </summary>
205+
/// <param name="request">The request-model which contains required and optional parameters.</param>
206+
/// <remarks>
207+
/// https://developer.spotify.com/documentation/web-api/reference/#endpoint-get-users-saved-episodes
208+
/// </remarks>
209+
/// <returns></returns>
210+
Task<Paging<SavedEpisodes>> GetEpisodes(LibraryEpisodesRequest request);
160211
}
161212
}

SpotifyAPI.Web/Clients/LibraryClient.cs

+35
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@ public Task<List<bool>> CheckTracks(LibraryCheckTracksRequest request)
3030
return API.Get<List<bool>>(SpotifyUrls.LibraryTracksContains(), request.BuildQueryParams());
3131
}
3232

33+
public Task<List<bool>> CheckEpisodes(LibraryCheckEpisodesRequest request)
34+
{
35+
Ensure.ArgumentNotNull(request, nameof(request));
36+
37+
return API.Get<List<bool>>(SpotifyUrls.LibraryEpisodesContains(), request.BuildQueryParams());
38+
}
39+
3340
public Task<Paging<SavedAlbum>> GetAlbums()
3441
{
3542
return API.Get<Paging<SavedAlbum>>(SpotifyUrls.LibraryAlbums());
@@ -66,6 +73,18 @@ public Task<Paging<SavedTrack>> GetTracks(LibraryTracksRequest request)
6673
return API.Get<Paging<SavedTrack>>(SpotifyUrls.LibraryTracks(), request.BuildQueryParams());
6774
}
6875

76+
public Task<Paging<SavedEpisodes>> GetEpisodes()
77+
{
78+
return API.Get<Paging<SavedEpisodes>>(SpotifyUrls.LibraryEpisodes());
79+
}
80+
81+
public Task<Paging<SavedEpisodes>> GetEpisodes(LibraryEpisodesRequest request)
82+
{
83+
Ensure.ArgumentNotNull(request, nameof(request));
84+
85+
return API.Get<Paging<SavedEpisodes>>(SpotifyUrls.LibraryEpisodes(), request.BuildQueryParams());
86+
}
87+
6988
public async Task<bool> RemoveAlbums(LibraryRemoveAlbumsRequest request)
7089
{
7190
Ensure.ArgumentNotNull(request, nameof(request));
@@ -90,6 +109,14 @@ public async Task<bool> RemoveTracks(LibraryRemoveTracksRequest request)
90109
return statusCode == HttpStatusCode.OK;
91110
}
92111

112+
public async Task<bool> RemoveEpisodes(LibraryRemoveEpisodesRequest request)
113+
{
114+
Ensure.ArgumentNotNull(request, nameof(request));
115+
116+
var statusCode = await API.Delete(SpotifyUrls.LibraryEpisodes(), null, request.BuildBodyParams()).ConfigureAwait(false);
117+
return statusCode == HttpStatusCode.OK;
118+
}
119+
93120
public async Task<bool> SaveAlbums(LibrarySaveAlbumsRequest request)
94121
{
95122
Ensure.ArgumentNotNull(request, nameof(request));
@@ -113,5 +140,13 @@ public async Task<bool> SaveTracks(LibrarySaveTracksRequest request)
113140
var statusCode = await API.Put(SpotifyUrls.LibraryTracks(), request.BuildQueryParams(), null).ConfigureAwait(false);
114141
return statusCode == HttpStatusCode.OK;
115142
}
143+
144+
public async Task<bool> SaveEpisodes(LibrarySaveEpisodesRequest request)
145+
{
146+
Ensure.ArgumentNotNull(request, nameof(request));
147+
148+
var statusCode = await API.Put(SpotifyUrls.LibraryEpisodes(), request.BuildQueryParams(), null).ConfigureAwait(false);
149+
return statusCode == HttpStatusCode.OK;
150+
}
116151
}
117152
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System.Collections.Generic;
2+
3+
namespace SpotifyAPI.Web
4+
{
5+
public class LibraryCheckEpisodesRequest : RequestParams
6+
{
7+
/// <summary>
8+
///
9+
/// </summary>
10+
/// <param name="ids">A comma-separated list of the Spotify IDs for the shows. Maximum: 50 ids.</param>
11+
public LibraryCheckEpisodesRequest(IList<string> ids)
12+
{
13+
Ensure.ArgumentNotNull(ids, nameof(ids));
14+
15+
Ids = ids;
16+
}
17+
18+
/// <summary>
19+
/// A comma-separated list of the Spotify IDs for the shows. Maximum: 50 ids.
20+
/// </summary>
21+
/// <value></value>
22+
[QueryParam("ids")]
23+
public IList<string> Ids { get; }
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
namespace SpotifyAPI.Web
2+
{
3+
public class LibraryEpisodesRequest : RequestParams
4+
{
5+
/// <summary>
6+
/// The maximum number of episodes to return. Default: 20. Minimum: 1. Maximum: 50
7+
/// </summary>
8+
/// <value></value>
9+
[QueryParam("limit")]
10+
public int? Limit { get; set; }
11+
12+
/// <summary>
13+
/// The index of the first episode to return. Default: 0 (the first object).
14+
/// Use with limit to get the next set of episodes.
15+
/// </summary>
16+
/// <value></value>
17+
[QueryParam("offset")]
18+
public int? Offset { get; set; }
19+
20+
/// <summary>
21+
/// An ISO 3166-1 alpha-2 country code or the string from_token.
22+
/// Provide this parameter if you want to apply Track Relinking.
23+
/// </summary>
24+
/// <value></value>
25+
[QueryParam("market")]
26+
public string? Market { get; set; }
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System.Collections.Generic;
2+
3+
namespace SpotifyAPI.Web
4+
{
5+
public class LibraryRemoveEpisodesRequest : RequestParams
6+
{
7+
/// <summary>
8+
///
9+
/// </summary>
10+
/// <param name="ids">
11+
/// A comma-separated list of Spotify IDs for the shows to be deleted from the user’s library.
12+
/// </param>
13+
public LibraryRemoveEpisodesRequest(IList<string> ids)
14+
{
15+
Ensure.ArgumentNotNullOrEmptyList(ids, nameof(ids));
16+
17+
Ids = ids;
18+
}
19+
20+
/// <summary>
21+
/// A comma-separated list of Spotify IDs for the shows to be deleted from the user’s library.
22+
/// </summary>
23+
/// <value></value>
24+
[BodyParam("ids")]
25+
public IList<string> Ids { get; }
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System.Collections.Generic;
2+
3+
namespace SpotifyAPI.Web
4+
{
5+
public class LibrarySaveEpisodesRequest : RequestParams
6+
{
7+
/// <summary>
8+
/// Request for SaveEpisodes.
9+
/// </summary>
10+
/// <param name="ids"></param>
11+
public LibrarySaveEpisodesRequest(IList<string> ids)
12+
{
13+
Ensure.ArgumentNotNullOrEmptyList(ids, nameof(ids));
14+
15+
Ids = ids;
16+
}
17+
18+
/// <summary>
19+
/// A comma-separated list of the Spotify IDs.
20+
/// Maximum: 50 IDs.
21+
/// </summary>
22+
/// <value></value>
23+
[QueryParam("ids")]
24+
public IList<string> Ids { get; }
25+
}
26+
}

SpotifyAPI.Web/Models/Response/AuthorizationCodeTokenResponse.cs

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Collections.Generic;
32

43
namespace SpotifyAPI.Web
54
{

SpotifyAPI.Web/Models/Response/CurrentlyPlaying.cs

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System;
21
using Newtonsoft.Json;
32

43
namespace SpotifyAPI.Web

SpotifyAPI.Web/Models/Response/PrivateUser.cs

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System.Collections.Generic;
2-
using Newtonsoft.Json;
32

43
namespace SpotifyAPI.Web
54
{

SpotifyAPI.Web/Models/Response/PublicUser.cs

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System.Collections.Generic;
2-
using Newtonsoft.Json;
32

43
namespace SpotifyAPI.Web
54
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System;
2+
3+
namespace SpotifyAPI.Web
4+
{
5+
public class SavedEpisodes
6+
{
7+
public DateTime AddedAt { get; set; }
8+
public FullEpisode Episode { get; set; } = default!;
9+
}
10+
}

SpotifyAPI.Web/SpotifyUrls.cs

+4
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ public static class SpotifyUrls
125125

126126
public static Uri LibraryShows() => EUri($"me/shows");
127127

128+
public static Uri LibraryEpisodes() => EUri($"me/episodes");
129+
130+
public static Uri LibraryEpisodesContains() => EUri($"me/episodes/contains");
131+
128132
private static Uri EUri(FormattableString path) => new(path.ToString(_provider), UriKind.Relative);
129133
}
130134
}

0 commit comments

Comments
 (0)