示例#1
0
        internal static LastStats ParseJToken(JToken token)
        {
            var stats = new LastStats
            {
                Listeners = token.Value <int>("listeners"),
                Plays     = token.Value <int>("plays")
            };

            return(stats);
        }
示例#2
0
        internal static LastStats ParseJToken(JToken token)
        {
            var stats = new LastStats
            {
                Listeners = token.Value<int>("listeners"),
                Plays = token.Value<int>("plays")
            };

            return stats;
        }
示例#3
0
        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);
        }