IF.Lastfm/IF.Lastfm.Core/Objects/Album.cs

73 lines
2.0 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
2013-06-13 16:29:52 +01:00
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace IF.Lastfm.Core.Objects
{
public class Album
{
#region Properties
public string Name { get; set; }
public IEnumerable<Track> Tracks { get; set; }
public string ArtistName { get; set; }
public string ArtistId { get; set; }
public DateTime ReleaseDateUtc { get; set; }
public int ListenerCount { get; set; }
public int TotalPlayCount { get; set; }
public string Mbid { get; set; }
public IEnumerable<Tag> TopTags { get; set; }
public Uri Url { get; set; }
#endregion
/// <summary>
/// TODO datetime parsing
/// TODO images
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
internal static Album ParseJToken(JToken token)
{
var a = new Album();
a.ArtistName = token.Value<string>("artist");
a.ArtistId = token.Value<string>("id");
a.ListenerCount = token.Value<int>("listeners");
a.Mbid = token.Value<string>("mbid");
a.Name = token.Value<string>("name");
a.TotalPlayCount = token.Value<int>("playcount");
a.Url = new Uri(token.Value<string>("url"), UriKind.Absolute);
2013-06-13 16:29:52 +01:00
var tracksToken = token.SelectToken("tracks").SelectToken("track");
a.Tracks = tracksToken.Children().Select(trackToken => Track.ParseJToken(trackToken, a.Name));
var tagsToken = token.SelectToken("toptags").SelectToken("tag");
a.TopTags = tagsToken.Children().Select(Tag.ParseJToken);
return a;
}
internal static string GetNameFromJToken(JToken albumToken)
{
var name = albumToken.Value<string>("name");
if (string.IsNullOrEmpty(name))
{
name = albumToken.Value<string>("#text");
}
return name;
}
}
}