TrackApi: Return image uris and timeplayed with tracks

This commit is contained in:
Rikki Tooley 2013-07-01 22:26:42 +01:00
parent 911204481c
commit 0b44ed584e
5 changed files with 96 additions and 13 deletions

View File

@ -48,6 +48,7 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.Bcl.Async.1.0.16\lib\net45\Microsoft.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="Moq">
<HintPath>..\packages\Moq.4.0.10827\lib\NET40\Moq.dll</HintPath>
<Private>True</Private>
@ -88,11 +89,7 @@
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework" />
</ItemGroup>
</Otherwise>
<Otherwise />
</Choose>
<ItemGroup>
<Compile Include="Objects\AlbumTests.cs" />

View File

@ -53,13 +53,7 @@ public async override Task<PageResponse<Track>> HandleResponse(HttpResponseMessa
foreach (var track in tracksToken.Children())
{
var t = Track.ParseJToken(track);
var date = track.SelectToken("date");
if (date != null)
{
var stamp = date.Value<double>("uts");
t.TimePlayed = stamp.ToDateTimeUtc();
}
tracks.Add(t);
}

View File

@ -68,6 +68,7 @@
<Compile Include="Objects\Artist.cs" />
<Compile Include="Objects\BuyLink.cs" />
<Compile Include="Objects\CountryCode.cs" />
<Compile Include="Objects\LastImageCollection.cs" />
<Compile Include="Objects\Shout.cs" />
<Compile Include="Objects\Station.cs" />
<Compile Include="Objects\Tag.cs" />

View File

@ -0,0 +1,75 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
namespace IF.Lastfm.Core.Objects
{
public class LastImageCollection : IEnumerable<Uri>
{
public Uri Small { get; set; }
public Uri Medium { get; set; }
public Uri Large { get; set; }
public Uri ExtraLarge { get; set; }
private IEnumerable<Uri> Images
{
get
{
return new List<Uri>()
{
Small,
Medium,
Large,
ExtraLarge
};
}
}
public static LastImageCollection ParseJToken(JToken images)
{
var c = new LastImageCollection();
foreach (var image in images.Children())
{
var size = image.Value<string>("size");
var uriString = image.Value<string>("#text");
if (string.IsNullOrEmpty(uriString))
{
break;
}
var uri = new Uri(uriString, UriKind.Absolute);
switch (size)
{
case "small":
c.Small = uri;
break;
case "medium":
c.Medium = uri;
break;
case "large":
c.Large = uri;
break;
case "extralarge":
c.ExtraLarge = uri;
break;
}
}
return c;
}
public IEnumerator<Uri> GetEnumerator()
{
return Images.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}

View File

@ -1,12 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using IF.Lastfm.Core.Api.Helpers;
using Newtonsoft.Json.Linq;
namespace IF.Lastfm.Core.Objects
{
/// <summary>
/// TODO Wiki, Images, Stream availability
/// TODO Wiki, Stream availability
/// </summary>
public class Track
{
@ -17,6 +18,7 @@ public class Track
public string Mbid { get; set; }
public string ArtistName { get; set; }
public Uri Url { get; set; }
public LastImageCollection Images { get; set; }
public string AlbumName { get; set; }
@ -60,6 +62,20 @@ internal static Track ParseJToken(JToken token)
t.TopTags = tagsToken.SelectToken("tag").Children().Select(Tag.ParseJToken);
}
var date = token.SelectToken("date");
if (date != null)
{
var stamp = date.Value<double>("uts");
t.TimePlayed = stamp.ToDateTimeUtc();
}
var images = token.SelectToken("image");
if (images != null)
{
var imageCollection = LastImageCollection.ParseJToken(images);
t.Images = imageCollection;
}
// api returns milliseconds when track.getInfo is called directly
var secs = token.Value<double>("duration");
if (Math.Abs(secs - default(double)) > double.Epsilon)