From e5395dfd19cd0f27d77c6d66acf821e619ee6eef Mon Sep 17 00:00:00 2001 From: Harry Date: Sun, 14 Dec 2014 18:31:36 -0400 Subject: [PATCH] Add bio and similar to artist object --- src/IF.Lastfm.Core/IF.Lastfm.Core.csproj | 1 + src/IF.Lastfm.Core/Objects/LastArtist.cs | 34 +++++++++++++++++++++--- src/IF.Lastfm.Core/Objects/LastBio.cs | 32 ++++++++++++++++++++++ 3 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 src/IF.Lastfm.Core/Objects/LastBio.cs diff --git a/src/IF.Lastfm.Core/IF.Lastfm.Core.csproj b/src/IF.Lastfm.Core/IF.Lastfm.Core.csproj index 9906f47..5adbc6c 100644 --- a/src/IF.Lastfm.Core/IF.Lastfm.Core.csproj +++ b/src/IF.Lastfm.Core/IF.Lastfm.Core.csproj @@ -98,6 +98,7 @@ + diff --git a/src/IF.Lastfm.Core/Objects/LastArtist.cs b/src/IF.Lastfm.Core/Objects/LastArtist.cs index b1b5128..cc510df 100644 --- a/src/IF.Lastfm.Core/Objects/LastArtist.cs +++ b/src/IF.Lastfm.Core/Objects/LastArtist.cs @@ -14,11 +14,12 @@ public class LastArtist : ILastfmObject public string Id { get; set; } public string Name { get; set; } + public LastBio Bio { get; set; } public string Mbid { get; set; } public Uri Url { get; set; } public bool OnTour { get; set; } public IEnumerable Tags { get; set; } - + public List Similar { get; set; } public LastImageSet MainImage { get; set; } #endregion @@ -39,7 +40,13 @@ internal static LastArtist ParseJToken(JToken token) a.Url = new Uri(url, UriKind.Absolute); a.OnTour = Convert.ToBoolean(token.Value("ontour")); - + + var bioToken = token.SelectToken("bio"); + if (bioToken != null) + { + a.Bio = LastBio.ParseJToken(bioToken); + } + var tagsToken = token.SelectToken("tags"); if (tagsToken != null) { @@ -59,7 +66,28 @@ internal static LastArtist ParseJToken(JToken token) var imageCollection = LastImageSet.ParseJToken(images); a.MainImage = imageCollection; } - + + a.Similar = new List(); + var similarToken = token.SelectToken("similar"); + if (similarToken != null) + { + 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; } diff --git a/src/IF.Lastfm.Core/Objects/LastBio.cs b/src/IF.Lastfm.Core/Objects/LastBio.cs new file mode 100644 index 0000000..e528624 --- /dev/null +++ b/src/IF.Lastfm.Core/Objects/LastBio.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json.Linq; + +namespace IF.Lastfm.Core.Objects +{ + public class LastBio : ILastfmObject + { + #region Properties + + public DateTime Published { get; set; } + public string Summary { get; set; } + public string Content { get; set; } + public int YearFormed { get; set; } + + #endregion + + internal static LastBio ParseJToken(JToken token) + { + return new LastBio + { + Published = token.Value("published"), + Summary = token.Value("summary").Trim(), + Content = token.Value("content").Trim(), + YearFormed = token.Value("yearformed") + }; + } + } +}