Skip to content

Commit 5d071de

Browse files
committed
Added more playlists endpoint
1 parent 93bcff5 commit 5d071de

6 files changed

Lines changed: 71 additions & 6 deletions

File tree

‎SpotifyAPI.Web/Clients/Interfaces/IPlaylistsClient.cs‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Collections.Generic;
12
using System.Threading.Tasks;
23

34
namespace SpotifyAPI.Web
@@ -12,5 +13,9 @@ public interface IPlaylistsClient
1213
Task<Paging<PlaylistTrack<IPlaylistItem>>> GetItems(string playlistId, PlaylistGetItemsRequest request);
1314

1415
Task<FullPlaylist> Create(string userId, PlaylistCreateRequest request);
16+
17+
Task<bool> UploadCover(string playlistId, string base64JpgData);
18+
19+
Task<List<Image>> GetCovers(string playlistId);
1520
}
1621
}

‎SpotifyAPI.Web/Clients/PlaylistsClient.cs‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using System.Collections.Generic;
2+
using System.Net;
13
using System.Threading.Tasks;
24
using SpotifyAPI.Web.Http;
35
using URLs = SpotifyAPI.Web.SpotifyUrls;
@@ -46,5 +48,21 @@ public Task<FullPlaylist> Create(string userId, PlaylistCreateRequest request)
4648

4749
return API.Post<FullPlaylist>(URLs.UserPlaylists(userId), null, request.BuildBodyParams());
4850
}
51+
52+
public async Task<bool> UploadCover(string playlistId, string base64Jpg)
53+
{
54+
Ensure.ArgumentNotNullOrEmptyString(playlistId, nameof(playlistId));
55+
Ensure.ArgumentNotNullOrEmptyString(base64Jpg, nameof(base64Jpg));
56+
57+
var response = await API.PutRaw(URLs.PlaylistImages(playlistId), null, base64Jpg);
58+
return response == HttpStatusCode.Accepted;
59+
}
60+
61+
public Task<List<Image>> GetCovers(string playlistId)
62+
{
63+
Ensure.ArgumentNotNullOrEmptyString(playlistId, nameof(playlistId));
64+
65+
return API.Get<List<Image>>(URLs.PlaylistImages(playlistId));
66+
}
4967
}
5068
}

‎SpotifyAPI.Web/Http/APIConnector.cs‎

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,31 +108,48 @@ public Task<T> Put<T>(Uri uri, IDictionary<string, string> parameters, object bo
108108
return SendAPIRequest<T>(uri, HttpMethod.Put, parameters, body);
109109
}
110110

111+
public async Task<HttpStatusCode> PutRaw(Uri uri, IDictionary<string, string> parameters, object body)
112+
{
113+
Ensure.ArgumentNotNull(uri, nameof(uri));
114+
115+
var response = await SendRawRequest(uri, HttpMethod.Put, parameters, body);
116+
return response.StatusCode;
117+
}
118+
111119
public void SetRequestTimeout(TimeSpan timeout)
112120
{
113121
_httpClient.SetRequestTimeout(timeout);
114122
}
115123

116-
public async Task<T> SendAPIRequest<T>(
124+
private IRequest CreateRequest(
117125
Uri uri,
118126
HttpMethod method,
119-
IDictionary<string, string> parameters = null,
120-
object body = null
127+
IDictionary<string, string> parameters,
128+
object body
121129
)
122130
{
123131
Ensure.ArgumentNotNull(uri, nameof(uri));
124132
Ensure.ArgumentNotNull(method, nameof(method));
125133

126-
var request = new Request
134+
return new Request
127135
{
128136
BaseAddress = _baseAddress,
129137
Parameters = parameters,
130138
Endpoint = uri,
131139
Method = method,
132140
Body = body
133141
};
142+
}
134143

144+
private async Task<IAPIResponse<T>> SendSerializedRequest<T>(IRequest request)
145+
{
135146
_jsonSerializer.SerializeRequest(request);
147+
var response = await SendRequest(request);
148+
return _jsonSerializer.DeserializeResponse<T>(response);
149+
}
150+
151+
private async Task<IResponse> SendRequest(IRequest request)
152+
{
136153
await _authenticator.Apply(request).ConfigureAwait(false);
137154
IResponse response = await _httpClient.DoRequest(request).ConfigureAwait(false);
138155
if (_retryHandler != null)
@@ -144,8 +161,29 @@ public async Task<T> SendAPIRequest<T>(
144161
});
145162
}
146163
ProcessErrors(response);
164+
return response;
165+
}
147166

148-
IAPIResponse<T> apiResponse = _jsonSerializer.DeserializeResponse<T>(response);
167+
public Task<IResponse> SendRawRequest(
168+
Uri uri,
169+
HttpMethod method,
170+
IDictionary<string, string> parameters = null,
171+
object body = null
172+
)
173+
{
174+
var request = CreateRequest(uri, method, parameters, body);
175+
return SendRequest(request);
176+
}
177+
178+
public async Task<T> SendAPIRequest<T>(
179+
Uri uri,
180+
HttpMethod method,
181+
IDictionary<string, string> parameters = null,
182+
object body = null
183+
)
184+
{
185+
var request = CreateRequest(uri, method, parameters, body);
186+
IAPIResponse<T> apiResponse = await SendSerializedRequest<T>(request);
149187
return apiResponse.Body;
150188
}
151189

‎SpotifyAPI.Web/Http/Interfaces/IAPIConnector.cs‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Net;
12
using System;
23
using System.Collections.Generic;
34
using System.Net.Http;
@@ -23,6 +24,7 @@ public interface IAPIConnector
2324
Task<T> Put<T>(Uri uri);
2425
Task<T> Put<T>(Uri uri, IDictionary<string, string> parameters);
2526
Task<T> Put<T>(Uri uri, IDictionary<string, string> parameters, object body);
27+
Task<HttpStatusCode> PutRaw(Uri uri, IDictionary<string, string> parameters, object body);
2628

2729
Task<T> Delete<T>(Uri uri);
2830
Task<T> Delete<T>(Uri uri, IDictionary<string, string> parameters);

‎SpotifyAPI.Web/Http/NewtonsoftJSONSerializer.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public IAPIResponse<T> DeserializeResponse<T>(IResponse response)
2727
{
2828
Ensure.ArgumentNotNull(response, nameof(response));
2929

30-
if (response.ContentType?.Equals("application/json", StringComparison.Ordinal) is true)
30+
if (response.ContentType?.Equals("application/json", StringComparison.Ordinal) is true || response.ContentType == null)
3131
{
3232
var body = JsonConvert.DeserializeObject<T>(response.Body as string, _serializerSettings);
3333
return new APIResponse<T>(response, body);

‎SpotifyAPI.Web/SpotifyUrls.cs‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public static class SpotifyUrls
3535

3636
public static Uri UserPlaylists(string userId) => EUri($"users/{userId}/playlists");
3737

38+
public static Uri PlaylistImages(string playlistId) => EUri($"playlists/{playlistId}/images");
39+
3840
private static Uri EUri(FormattableString path) => new Uri(path.ToString(_provider), UriKind.Relative);
3941
}
4042
}

0 commit comments

Comments
 (0)