internal static LastStats ParseJToken(JToken token) { var stats = new LastStats { Listeners = token.Value <int>("listeners"), Plays = token.Value <int>("plays") }; return(stats); }
internal static LastStats ParseJToken(JToken token) { var stats = new LastStats { Listeners = token.Value<int>("listeners"), Plays = token.Value<int>("plays") }; return stats; }
internal static LastArtist ParseJToken(JToken token) { var a = new LastArtist(); a.Id = token.Value <string>("id"); a.Name = token.Value <string>("name"); a.Mbid = token.Value <string>("mbid"); var url = token.Value <string>("url"); var playCountStr = token.Value <string>("playcount"); int playCount; if (int.TryParse(playCountStr, out playCount)) { a.PlayCount = playCount; } var matchStr = token.Value <string>("match"); double match; if (double.TryParse(matchStr, out match)) { a.MatchSimilar = match; } // for some stupid reason the api returns the url without http in the get similar method, WHY? if (!url.StartsWith("http")) { url = "http://" + url; } a.Url = new Uri(url, UriKind.Absolute); a.OnTour = Convert.ToBoolean(token.Value <int>("ontour")); var statsToken = token.SelectToken("stats"); if (statsToken != null) { a.Stats = LastStats.ParseJToken(statsToken); } var bioToken = token.SelectToken("bio"); if (bioToken != null) { a.Bio = LastWiki.ParseJToken(bioToken); } var tagsToken = token.SelectToken("tags"); if (tagsToken != null) { var tagToken = tagsToken.SelectToken("tag"); if (tagToken != null) { a.Tags = tagToken.Type == JTokenType.Array ? tagToken.Children().Select(token1 => LastTag.ParseJToken(token1)) : new List <LastTag> { LastTag.ParseJToken(tagToken) }; } } var images = token.SelectToken("image"); if (images != null && images.HasValues) { var imageCollection = LastImageSet.ParseJToken(images); a.MainImage = imageCollection; } var similarToken = token.SelectToken("similar"); if (similarToken != null) { a.Similar = new List <LastArtist>(); var similarArtists = similarToken.SelectToken("artist"); if (similarArtists != null && similarArtists.Children().Any()) { // array notation isn't used on the api when only one object is available if (similarArtists.Type != JTokenType.Array) { var item = ParseJToken(similarArtists); a.Similar.Add(item); } else { var items = similarArtists.Children().Select(ParseJToken); a.Similar.AddRange(items); } } } return(a); }