mirror of
https://github.com/Sarsoo/IF.Lastfm.git
synced 2024-10-17 07:13:09 +01:00
TrackApi: Return image uris and timeplayed with tracks
This commit is contained in:
parent
911204481c
commit
0b44ed584e
@ -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" />
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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" />
|
||||
|
75
IF.Lastfm.Core/Objects/LastImageCollection.cs
Normal file
75
IF.Lastfm.Core/Objects/LastImageCollection.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user