Skip to content

Commit 16a831a

Browse files
committed
Some smaller fixes and ignore case when parsing type of iplayableitem, fixes JohnnyCrazy#604
1 parent d72235e commit 16a831a

6 files changed

Lines changed: 44 additions & 14 deletions

File tree

‎SpotifyAPI.Web.Examples/Example.CLI.PersistentConfig/Program.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ private static async Task Start()
5151
var json = await File.ReadAllTextAsync(CredentialsPath);
5252
var token = JsonConvert.DeserializeObject<PKCETokenResponse>(json);
5353

54-
var authenticator = new PKCEAuthenticator(clientId!, token);
54+
var authenticator = new PKCEAuthenticator(clientId!, token!);
5555
authenticator.TokenRefreshed += (sender, token) => File.WriteAllText(CredentialsPath, JsonConvert.SerializeObject(token));
5656

5757
var config = SpotifyClientConfig.CreateDefault()

‎SpotifyAPI.Web.Tests/Fixtures/full_playlist_response.json‎

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

‎SpotifyAPI.Web.Tests/Models/PlayableItemConverterTest.cs‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Threading.Tasks;
35
using Newtonsoft.Json;
46
using NUnit.Framework;
57

@@ -18,5 +20,23 @@ public void PlayableItemConverter_CanSerialize()
1820
var serialized = JsonConvert.SerializeObject(context);
1921
});
2022
}
23+
24+
[Test]
25+
public async Task PlayableItemConverter_Reserialize()
26+
{
27+
// This has lowercase field names since it's a spotify response
28+
var fixture = await File.ReadAllTextAsync(
29+
Path.Join(TestContext.CurrentContext.TestDirectory, "Fixtures/full_playlist_response.json")
30+
);
31+
32+
var fullPlaylist = JsonConvert.DeserializeObject<FullPlaylist>(fixture);
33+
// This whill have uppercase field names since we use default JsonConvert settings
34+
var serialized = JsonConvert.SerializeObject(fullPlaylist);
35+
36+
Assert.DoesNotThrow(() =>
37+
{
38+
var deserialized = JsonConvert.DeserializeObject<FullPlaylist>(serialized);
39+
});
40+
}
2141
}
2242
}

‎SpotifyAPI.Web.Tests/SpotifyAPI.Web.Tests.csproj‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFrameworks>net5.0;netcoreapp3.1;netcoreapp2.2</TargetFrameworks>
5+
<LangVersion>9.0</LangVersion>
56
<IsPackable>false</IsPackable>
67
</PropertyGroup>
78

@@ -18,4 +19,10 @@
1819
<ProjectReference Include="..\SpotifyAPI.Web.Auth\SpotifyAPI.Web.Auth.csproj" />
1920
</ItemGroup>
2021

22+
<ItemGroup>
23+
<Content Include="Fixtures\*.*">
24+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
25+
</Content>
26+
</ItemGroup>
27+
2128
</Project>

‎SpotifyAPI.Web/Exceptions/APIException.cs‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,12 @@ protected APIException(SerializationInfo info, StreamingContext context) : base(
4646
{
4747
JObject bodyObject = JObject.Parse(body!);
4848

49-
5049
var error = bodyObject.Value<JToken>("error");
51-
if (error.Type == JTokenType.String)
50+
if (error == null)
51+
{
52+
return null;
53+
}
54+
else if (error.Type == JTokenType.String)
5255
{
5356
return error.ToString();
5457
}

‎SpotifyAPI.Web/Models/Converters/PlayableItemConverter.cs‎

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,23 @@ public class PlayableItemConverter : JsonConverter
1515
{
1616
Ensure.ArgumentNotNull(serializer, nameof(serializer));
1717

18-
var token = JToken.ReadFrom(reader);
19-
if (token.Type == JTokenType.Null)
18+
if (JToken.ReadFrom(reader) is not JObject obj)
2019
{
2120
return null;
2221
}
2322

24-
var type = token["type"]?.Value<string>();
25-
if (type == "track")
23+
var type = obj.GetValue("type", StringComparison.OrdinalIgnoreCase)?.Value<string>();
24+
if (string.Equals(type, "track", StringComparison.OrdinalIgnoreCase))
2625
{
27-
var obj = new FullTrack();
28-
serializer.Populate(token.CreateReader(), obj);
29-
return obj;
26+
var track = new FullTrack();
27+
serializer.Populate(obj.CreateReader(), track);
28+
return track;
3029
}
31-
else if (type == "episode")
30+
else if (string.Equals(type, "episode", StringComparison.OrdinalIgnoreCase))
3231
{
33-
var obj = new FullEpisode();
34-
serializer.Populate(token.CreateReader(), obj);
35-
return obj;
32+
var episode = new FullEpisode();
33+
serializer.Populate(obj.CreateReader(), episode);
34+
return episode;
3635
}
3736
else
3837
{

0 commit comments

Comments
 (0)