Skip to content

Commit

Permalink
Only parse JSON when content-type is set to JSON
Browse files Browse the repository at this point in the history
  • Loading branch information
JohnnyCrazy committed Oct 12, 2024
1 parent e3705f0 commit f7ba9c6
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 20 deletions.
4 changes: 2 additions & 2 deletions SpotifyAPI.Web/Clients/FollowClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public async Task<bool> Follow(FollowRequest request, CancellationToken cancel =
var statusCode = await API
.Put(URLs.CurrentUserFollower(), request.BuildQueryParams(), request.BuildBodyParams(), cancel)
.ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}

public async Task<bool> FollowPlaylist(string playlistId, CancellationToken cancel = default)
Expand Down Expand Up @@ -78,7 +78,7 @@ public async Task<bool> Unfollow(UnfollowRequest request, CancellationToken canc
var statusCode = await API
.Delete(URLs.CurrentUserFollower(), request.BuildQueryParams(), request.BuildBodyParams(), cancel)
.ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}

public async Task<bool> UnfollowPlaylist(string playlistId, CancellationToken cancel = default)
Expand Down
28 changes: 14 additions & 14 deletions SpotifyAPI.Web/Clients/PlayerClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public async Task<bool> AddToQueue(PlayerAddToQueueRequest request, Cancellation
Ensure.ArgumentNotNull(request, nameof(request));

HttpStatusCode statusCode = await API.Post(URLs.PlayerQueue(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}

public Task<QueueResponse> GetQueue(CancellationToken cancel = default)
Expand Down Expand Up @@ -62,21 +62,21 @@ public Task<CursorPaging<PlayHistoryItem>> GetRecentlyPlayed(PlayerRecentlyPlaye
public async Task<bool> PausePlayback(CancellationToken cancel = default)
{
HttpStatusCode statusCode = await API.Put(URLs.PlayerPause(), null, null, cancel).ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}

public async Task<bool> PausePlayback(PlayerPausePlaybackRequest request, CancellationToken cancel = default)
{
Ensure.ArgumentNotNull(request, nameof(request));

HttpStatusCode statusCode = await API.Put(URLs.PlayerPause(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}

public async Task<bool> ResumePlayback(CancellationToken cancel = default)
{
HttpStatusCode statusCode = await API.Put(URLs.PlayerResume(), null, null, cancel).ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}

public async Task<bool> ResumePlayback(PlayerResumePlaybackRequest request, CancellationToken cancel = default)
Expand All @@ -86,75 +86,75 @@ public async Task<bool> ResumePlayback(PlayerResumePlaybackRequest request, Canc
HttpStatusCode statusCode = await API
.Put(URLs.PlayerResume(), request.BuildQueryParams(), request.BuildBodyParams(), cancel)
.ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}

public async Task<bool> SeekTo(PlayerSeekToRequest request, CancellationToken cancel = default)
{
Ensure.ArgumentNotNull(request, nameof(request));

HttpStatusCode statusCode = await API.Put(URLs.PlayerSeek(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}

public async Task<bool> SetRepeat(PlayerSetRepeatRequest request, CancellationToken cancel = default)
{
Ensure.ArgumentNotNull(request, nameof(request));

HttpStatusCode statusCode = await API.Put(URLs.PlayerRepeat(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}

public async Task<bool> SetShuffle(PlayerShuffleRequest request, CancellationToken cancel = default)
{
Ensure.ArgumentNotNull(request, nameof(request));

HttpStatusCode statusCode = await API.Put(URLs.PlayerShuffle(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}

public async Task<bool> SetVolume(PlayerVolumeRequest request, CancellationToken cancel = default)
{
Ensure.ArgumentNotNull(request, nameof(request));

HttpStatusCode statusCode = await API.Put(URLs.PlayerVolume(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}

public async Task<bool> SkipNext(CancellationToken cancel = default)
{
HttpStatusCode statusCode = await API.Post(URLs.PlayerNext(), null, null, cancel).ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}

public async Task<bool> SkipNext(PlayerSkipNextRequest request, CancellationToken cancel = default)
{
Ensure.ArgumentNotNull(request, nameof(request));

HttpStatusCode statusCode = await API.Post(URLs.PlayerNext(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}

public async Task<bool> SkipPrevious(CancellationToken cancel = default)
{
HttpStatusCode statusCode = await API.Post(URLs.PlayerPrevious(), null, null, cancel).ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}

public async Task<bool> SkipPrevious(PlayerSkipPreviousRequest request, CancellationToken cancel = default)
{
Ensure.ArgumentNotNull(request, nameof(request));

HttpStatusCode statusCode = await API.Post(URLs.PlayerPrevious(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}

public async Task<bool> TransferPlayback(PlayerTransferPlaybackRequest request, CancellationToken cancel = default)
{
Ensure.ArgumentNotNull(request, nameof(request));

HttpStatusCode statusCode = await API.Put(URLs.Player(), null, request.BuildBodyParams(), cancel).ConfigureAwait(false);
return statusCode == HttpStatusCode.NoContent;
return HTTPUtil.StatusCodeIsSuccess(statusCode);
}
}
}
5 changes: 1 addition & 4 deletions SpotifyAPI.Web/Http/NewtonsoftJSONSerializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,7 @@ public IAPIResponse<T> DeserializeResponse<T>(IResponse response)
{
Ensure.ArgumentNotNull(response, nameof(response));

if (
(
response.ContentType?.Equals("application/json", StringComparison.Ordinal) is true || response.ContentType == null
))
if (response.ContentType?.Equals("application/json", StringComparison.OrdinalIgnoreCase) is true)
{
var body = JsonConvert.DeserializeObject<T>(response.Body as string ?? "", _serializerSettings);
return new APIResponse<T>(response, body!);
Expand Down
12 changes: 12 additions & 0 deletions SpotifyAPI.Web/Util/HTTP.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System.Net;

namespace SpotifyAPI.Web
{
internal static class HTTPUtil
{
public static bool StatusCodeIsSuccess(HttpStatusCode statusCode)
{
return ((int)statusCode >= 200) && ((int)statusCode <= 299);
}
}
}

0 comments on commit f7ba9c6

Please sign in to comment.