Check for token type instead of handling an exception

This commit is contained in:
Rikki Tooley 2014-10-08 02:09:51 +01:00
parent 878e7c0e63
commit ceb16a96fa

View File

@ -40,29 +40,33 @@ internal static Album ParseJToken(JToken token)
{ {
var a = new Album(); var a = new Album();
try var artistToken = token["artist"];
if (artistToken.Type == JTokenType.String)
{ {
a.ArtistName = token.Value<string>("artist"); a.ArtistName = token.Value<string>("artist");
a.ArtistId = token.Value<string>("id"); a.ArtistId = token.Value<string>("id");
}
else if (artistToken.Type == JTokenType.Object)
{
a.ArtistName = artistToken.Value<string>("name");
a.ArtistId = artistToken.Value<string>("mbid");
}
var tracksToken = token.SelectToken("tracks").SelectToken("track"); var tracksToken = token.SelectToken("tracks");
if (tracksToken != null) if (tracksToken != null)
{ {
a.Tracks = tracksToken.Children().Select(trackToken => Track.ParseJToken(trackToken, a.Name)); var trackToken = tracksToken.SelectToken("track");
if (trackToken != null)
{
a.Tracks = tracksToken.Children().Select(t => Track.ParseJToken(t, a.Name));
}
} }
var tagsToken = token.SelectToken("toptags").SelectToken("tag"); var tagsToken = token.SelectToken("toptags");
if (tagsToken != null) if (tagsToken != null)
{ {
a.TopTags = tagsToken.Children().Select(Tag.ParseJToken); var tagToken = tagsToken.SelectToken("tag");
} a.TopTags = tagToken.Children().Select(Tag.ParseJToken);
}
catch
{
// for when artist is not a string but a Artist object
var artist = token.SelectToken("artist").ToObject<Artist>();
a.ArtistName = artist.Name;
a.ArtistId = artist.Mbid;
} }
a.ListenerCount = token.Value<int>("listeners"); a.ListenerCount = token.Value<int>("listeners");