From fabf49ef3ac9a3d752fe9559fb6b10d713f6d127 Mon Sep 17 00:00:00 2001 From: Jonas Dellinger Date: Sat, 16 May 2020 18:48:32 +0200 Subject: [PATCH] netstandard2.0 support --- .../SpotifyAPI.Web.Auth.csproj | 2 +- SpotifyAPI.Web/Http/APIConnector.cs | 16 ++++++--- SpotifyAPI.Web/Http/NetHttpClient.cs | 34 +++++++++++-------- SpotifyAPI.Web/Http/SimpleHTTPLogger.cs | 6 +++- SpotifyAPI.Web/Http/SimpleRetryHandler.cs | 2 +- .../Response/Interfaces/IPlaylistElement.cs | 2 +- SpotifyAPI.Web/SpotifyAPI.Web.csproj | 2 +- 7 files changed, 40 insertions(+), 24 deletions(-) diff --git a/SpotifyAPI.Web.Auth/SpotifyAPI.Web.Auth.csproj b/SpotifyAPI.Web.Auth/SpotifyAPI.Web.Auth.csproj index 7d9bed8b..3472e69c 100644 --- a/SpotifyAPI.Web.Auth/SpotifyAPI.Web.Auth.csproj +++ b/SpotifyAPI.Web.Auth/SpotifyAPI.Web.Auth.csproj @@ -1,6 +1,6 @@  - netstandard2.1 + netstandard2.1;netstandard2.0 SpotifyAPI.Web.Auth SpotifyAPI.Web.Auth Jonas Dellinger diff --git a/SpotifyAPI.Web/Http/APIConnector.cs b/SpotifyAPI.Web/Http/APIConnector.cs index 1d7c73b7..261fe139 100644 --- a/SpotifyAPI.Web/Http/APIConnector.cs +++ b/SpotifyAPI.Web/Http/APIConnector.cs @@ -212,9 +212,15 @@ namespace SpotifyAPI.Web.Http private async Task ApplyAuthenticator(IRequest request) { +#if NETSTANDARD2_0 + if (_authenticator != null + && !request.Endpoint.IsAbsoluteUri + || request.Endpoint.AbsoluteUri.Contains("https://api.spotify.com")) +#else if (_authenticator != null && !request.Endpoint.IsAbsoluteUri || request.Endpoint.AbsoluteUri.Contains("https://api.spotify.com", StringComparison.InvariantCulture)) +#endif { await _authenticator.Apply(request, this).ConfigureAwait(false); } @@ -267,11 +273,13 @@ namespace SpotifyAPI.Web.Http return; } - throw response.StatusCode switch + switch (response.StatusCode) { - HttpStatusCode.Unauthorized => new APIUnauthorizedException(response), - _ => new APIException(response), - }; + case HttpStatusCode.Unauthorized: + throw new APIUnauthorizedException(response); + default: + throw new APIException(response); + } } } } diff --git a/SpotifyAPI.Web/Http/NetHttpClient.cs b/SpotifyAPI.Web/Http/NetHttpClient.cs index dc860b12..8c9fc7d9 100644 --- a/SpotifyAPI.Web/Http/NetHttpClient.cs +++ b/SpotifyAPI.Web/Http/NetHttpClient.cs @@ -30,12 +30,14 @@ namespace SpotifyAPI.Web.Http { Ensure.ArgumentNotNull(request, nameof(request)); - using HttpRequestMessage requestMsg = BuildRequestMessage(request); - var responseMsg = await _httpClient - .SendAsync(requestMsg, HttpCompletionOption.ResponseContentRead) - .ConfigureAwait(false); + using (HttpRequestMessage requestMsg = BuildRequestMessage(request)) + { + var responseMsg = await _httpClient + .SendAsync(requestMsg, HttpCompletionOption.ResponseContentRead) + .ConfigureAwait(false); - return await BuildResponse(responseMsg).ConfigureAwait(false); + return await BuildResponse(responseMsg).ConfigureAwait(false); + } } private static async Task BuildResponse(HttpResponseMessage responseMsg) @@ -43,17 +45,19 @@ namespace SpotifyAPI.Web.Http Ensure.ArgumentNotNull(responseMsg, nameof(responseMsg)); // We only support text stuff for now - using var content = responseMsg.Content; - var headers = responseMsg.Headers.ToDictionary(header => header.Key, header => header.Value.First()); - var body = await responseMsg.Content.ReadAsStringAsync().ConfigureAwait(false); - var contentType = content.Headers?.ContentType?.MediaType; - - return new Response(headers) + using (var content = responseMsg.Content) { - ContentType = contentType, - StatusCode = responseMsg.StatusCode, - Body = body - }; + var headers = responseMsg.Headers.ToDictionary(header => header.Key, header => header.Value.First()); + var body = await responseMsg.Content.ReadAsStringAsync().ConfigureAwait(false); + var contentType = content.Headers?.ContentType?.MediaType; + + return new Response(headers) + { + ContentType = contentType, + StatusCode = responseMsg.StatusCode, + Body = body + }; + } } private static HttpRequestMessage BuildRequestMessage(IRequest request) diff --git a/SpotifyAPI.Web/Http/SimpleHTTPLogger.cs b/SpotifyAPI.Web/Http/SimpleHTTPLogger.cs index f2b2ede7..8ec57608 100644 --- a/SpotifyAPI.Web/Http/SimpleHTTPLogger.cs +++ b/SpotifyAPI.Web/Http/SimpleHTTPLogger.cs @@ -25,8 +25,12 @@ namespace SpotifyAPI.Web.Http public void OnResponse(IResponse response) { Ensure.ArgumentNotNull(response, nameof(response)); - +#if NETSTANDARD2_0 + string body = response.Body?.ToString().Replace("\n", ""); +#else string body = response.Body?.ToString().Replace("\n", "", StringComparison.InvariantCulture); +#endif + body = body?.Substring(0, Math.Min(50, body?.Length ?? 0)); Console.WriteLine("--> {0} {1} {2}\n", response.StatusCode, response.ContentType, body); } diff --git a/SpotifyAPI.Web/Http/SimpleRetryHandler.cs b/SpotifyAPI.Web/Http/SimpleRetryHandler.cs index 53ab8fb4..598a4c2d 100644 --- a/SpotifyAPI.Web/Http/SimpleRetryHandler.cs +++ b/SpotifyAPI.Web/Http/SimpleRetryHandler.cs @@ -52,7 +52,7 @@ namespace SpotifyAPI.Web.Http private static int? ParseTooManyRetriesToMs(IResponse response) { - if (response.StatusCode != HttpStatusCode.TooManyRequests) + if (response.StatusCode != (HttpStatusCode)429) { return null; } diff --git a/SpotifyAPI.Web/Models/Response/Interfaces/IPlaylistElement.cs b/SpotifyAPI.Web/Models/Response/Interfaces/IPlaylistElement.cs index 2aaa2a6c..d879619f 100644 --- a/SpotifyAPI.Web/Models/Response/Interfaces/IPlaylistElement.cs +++ b/SpotifyAPI.Web/Models/Response/Interfaces/IPlaylistElement.cs @@ -12,6 +12,6 @@ namespace SpotifyAPI.Web public interface IPlayableItem { [JsonConverter(typeof(StringEnumConverter))] - public ItemType Type { get; } + ItemType Type { get; } } } diff --git a/SpotifyAPI.Web/SpotifyAPI.Web.csproj b/SpotifyAPI.Web/SpotifyAPI.Web.csproj index 9a597a39..8e45743b 100644 --- a/SpotifyAPI.Web/SpotifyAPI.Web.csproj +++ b/SpotifyAPI.Web/SpotifyAPI.Web.csproj @@ -1,7 +1,7 @@  - netstandard2.1 + netstandard2.1;netstandard2.0 SpotifyAPI.Web SpotifyAPI.Web