mirror of
https://github.com/Sarsoo/IF.Lastfm.git
synced 2024-10-17 07:13:09 +01:00
Implemented user.getTopArtists
This commit is contained in:
parent
4cfac6a411
commit
23be035257
@ -0,0 +1,185 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using IF.Lastfm.Core.Api.Commands.User;
|
||||||
|
using IF.Lastfm.Core.Api.Enums;
|
||||||
|
using IF.Lastfm.Core.Api.Helpers;
|
||||||
|
using IF.Lastfm.Core.Objects;
|
||||||
|
using IF.Lastfm.Core.Tests.Resources;
|
||||||
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
namespace IF.Lastfm.Core.Tests.Api.Commands
|
||||||
|
{
|
||||||
|
public class UserGetTopArtistsCommandTests : CommandTestsBase
|
||||||
|
{
|
||||||
|
private const string USER = "Aurvandil";
|
||||||
|
private const LastStatsTimeSpan SPAN = LastStatsTimeSpan.Overall;
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ParametersCorrect()
|
||||||
|
{
|
||||||
|
var expected = new Dictionary<string, string>
|
||||||
|
{
|
||||||
|
{"user", USER},
|
||||||
|
{"period", SPAN.GetApiName()},
|
||||||
|
{"page", "5"},
|
||||||
|
{"limit", "10"}
|
||||||
|
};
|
||||||
|
|
||||||
|
var command = new GetTopArtistsCommand(MAuth.Object, USER, SPAN)
|
||||||
|
{
|
||||||
|
Page = 5,
|
||||||
|
Count = 10
|
||||||
|
};
|
||||||
|
|
||||||
|
command.SetParameters();
|
||||||
|
command.Parameters.Remove("disablecachetoken");
|
||||||
|
|
||||||
|
TestHelper.AssertSerialiseEqual(expected, command.Parameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task HandleResponseSingle()
|
||||||
|
{
|
||||||
|
var command = new GetTopArtistsCommand(MAuth.Object, USER, SPAN)
|
||||||
|
{
|
||||||
|
Page = 1,
|
||||||
|
Count = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
command.SetParameters();
|
||||||
|
|
||||||
|
var expectedArtist = new LastArtist
|
||||||
|
{
|
||||||
|
Name = "Anathema",
|
||||||
|
PlayCount = 5216,
|
||||||
|
Mbid = "20aa23e3-3532-42ca-acf6-e8c2e9df2688",
|
||||||
|
Url = new Uri("http://www.last.fm/music/Anathema"),
|
||||||
|
MainImage =
|
||||||
|
new LastImageSet("http://userserve-ak.last.fm/serve/34/12571597.jpg",
|
||||||
|
"http://userserve-ak.last.fm/serve/64/12571597.jpg",
|
||||||
|
"http://userserve-ak.last.fm/serve/126/12571597.jpg",
|
||||||
|
"http://userserve-ak.last.fm/serve/252/12571597.jpg",
|
||||||
|
"http://userserve-ak.last.fm/serve/_/12571597/Anathema+Judgement+promo.jpg")
|
||||||
|
};
|
||||||
|
|
||||||
|
var response = CreateResponseMessage(Encoding.UTF8.GetString(UserApiResponses.UserGetTopArtistsSingle));
|
||||||
|
var parsed = await command.HandleResponse(response);
|
||||||
|
|
||||||
|
Assert.IsTrue(parsed.Success);
|
||||||
|
Assert.AreEqual(1, parsed.Page);
|
||||||
|
Assert.AreEqual(1, parsed.PageSize);
|
||||||
|
Assert.AreEqual(1124, parsed.TotalItems);
|
||||||
|
Assert.AreEqual(1124, parsed.TotalPages);
|
||||||
|
Assert.AreEqual(1, parsed.Content.Count);
|
||||||
|
|
||||||
|
var actualArtist = parsed.Content.First();
|
||||||
|
|
||||||
|
TestHelper.AssertSerialiseEqual(expectedArtist, actualArtist);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task HandleResponseMultiple()
|
||||||
|
{
|
||||||
|
var command = new GetTopArtistsCommand(MAuth.Object, USER, SPAN)
|
||||||
|
{
|
||||||
|
Page = 1,
|
||||||
|
Count = 2
|
||||||
|
};
|
||||||
|
|
||||||
|
command.SetParameters();
|
||||||
|
|
||||||
|
var expectedArtists = new List<LastArtist>
|
||||||
|
{
|
||||||
|
new LastArtist
|
||||||
|
{
|
||||||
|
Name = "Anathema",
|
||||||
|
PlayCount = 5216,
|
||||||
|
Mbid = "20aa23e3-3532-42ca-acf6-e8c2e9df2688",
|
||||||
|
Url = new Uri("http://www.last.fm/music/Anathema"),
|
||||||
|
MainImage =
|
||||||
|
new LastImageSet("http://userserve-ak.last.fm/serve/34/12571597.jpg",
|
||||||
|
"http://userserve-ak.last.fm/serve/64/12571597.jpg",
|
||||||
|
"http://userserve-ak.last.fm/serve/126/12571597.jpg",
|
||||||
|
"http://userserve-ak.last.fm/serve/252/12571597.jpg",
|
||||||
|
"http://userserve-ak.last.fm/serve/_/12571597/Anathema+Judgement+promo.jpg")
|
||||||
|
},
|
||||||
|
new LastArtist
|
||||||
|
{
|
||||||
|
Name = "Insomnium",
|
||||||
|
PlayCount = 4670,
|
||||||
|
Mbid = "c1f8e226-75ea-4fe6-83ce-59c122bcbca4",
|
||||||
|
Url = new Uri("http://www.last.fm/music/Insomnium"),
|
||||||
|
MainImage =
|
||||||
|
new LastImageSet("http://userserve-ak.last.fm/serve/34/70409268.jpg",
|
||||||
|
"http://userserve-ak.last.fm/serve/64/70409268.jpg",
|
||||||
|
"http://userserve-ak.last.fm/serve/126/70409268.jpg",
|
||||||
|
"http://userserve-ak.last.fm/serve/252/70409268.jpg",
|
||||||
|
"http://userserve-ak.last.fm/serve/500/70409268/Insomnium.jpg")
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
var response = CreateResponseMessage(Encoding.UTF8.GetString(UserApiResponses.UserGetTopArtistsMultiple));
|
||||||
|
var parsed = await command.HandleResponse(response);
|
||||||
|
|
||||||
|
Assert.IsTrue(parsed.Success);
|
||||||
|
Assert.AreEqual(1, parsed.Page);
|
||||||
|
Assert.AreEqual(2, parsed.PageSize);
|
||||||
|
Assert.AreEqual(1124, parsed.TotalItems);
|
||||||
|
Assert.AreEqual(562, parsed.TotalPages);
|
||||||
|
Assert.AreEqual(2, parsed.Content.Count);
|
||||||
|
|
||||||
|
var actualArtists = parsed.Content;
|
||||||
|
|
||||||
|
TestHelper.AssertSerialiseEqual(expectedArtists, actualArtists);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task HandleResponseEmpty()
|
||||||
|
{
|
||||||
|
const string USER_WITH_NO_PLAYS = "e";
|
||||||
|
var command = new GetTopArtistsCommand(MAuth.Object, USER_WITH_NO_PLAYS, SPAN)
|
||||||
|
{
|
||||||
|
Page = 1,
|
||||||
|
Count = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
command.SetParameters();
|
||||||
|
|
||||||
|
var response = CreateResponseMessage(Encoding.UTF8.GetString(UserApiResponses.UserGetTopArtistsEmpty));
|
||||||
|
var parsed = await command.HandleResponse(response);
|
||||||
|
|
||||||
|
Assert.IsTrue(parsed.Success);
|
||||||
|
Assert.AreEqual(1, parsed.Page);
|
||||||
|
Assert.AreEqual(0, parsed.PageSize);
|
||||||
|
Assert.AreEqual(0, parsed.TotalItems);
|
||||||
|
Assert.AreEqual(1, parsed.TotalPages);
|
||||||
|
Assert.AreEqual(0, parsed.Content.Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task HandleResponseError()
|
||||||
|
{
|
||||||
|
var command = new GetTopArtistsCommand(MAuth.Object, USER, SPAN)
|
||||||
|
{
|
||||||
|
Page = 1,
|
||||||
|
Count = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
command.SetParameters();
|
||||||
|
|
||||||
|
var response = CreateResponseMessage(Encoding.UTF8.GetString(UserApiResponses.UserGetTopArtistsError));
|
||||||
|
var parsed = await command.HandleResponse(response);
|
||||||
|
|
||||||
|
Assert.IsFalse(parsed.Success);
|
||||||
|
Assert.AreEqual(1, parsed.Page);
|
||||||
|
Assert.AreEqual(0, parsed.PageSize);
|
||||||
|
Assert.AreEqual(0, parsed.TotalItems);
|
||||||
|
Assert.AreEqual(1, parsed.TotalPages);
|
||||||
|
Assert.AreEqual(0, parsed.Content.Count);
|
||||||
|
Assert.AreEqual(LastResponseStatus.MissingParameters, parsed.Status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -99,6 +99,7 @@
|
|||||||
<Compile Include="Api\Commands\UserGetRecentTracksCommandTests.cs" />
|
<Compile Include="Api\Commands\UserGetRecentTracksCommandTests.cs" />
|
||||||
<Compile Include="Api\Commands\UserGetRecommendedArtistsCommandTests.cs" />
|
<Compile Include="Api\Commands\UserGetRecommendedArtistsCommandTests.cs" />
|
||||||
<Compile Include="Api\Commands\UserGetTopAlbumsCommandTests.cs" />
|
<Compile Include="Api\Commands\UserGetTopAlbumsCommandTests.cs" />
|
||||||
|
<Compile Include="Api\Commands\UserGetTopArtistsCommandTests.cs" />
|
||||||
<Compile Include="Api\Helpers\ApiHelperTests.cs" />
|
<Compile Include="Api\Helpers\ApiHelperTests.cs" />
|
||||||
<Compile Include="Api\LastMethodsNamesTests.cs" />
|
<Compile Include="Api\LastMethodsNamesTests.cs" />
|
||||||
<Compile Include="Api\LastAuthTests.cs" />
|
<Compile Include="Api\LastAuthTests.cs" />
|
||||||
@ -195,6 +196,10 @@
|
|||||||
<None Include="Resources\UserApi\UserGetTopAlbumsError.json" />
|
<None Include="Resources\UserApi\UserGetTopAlbumsError.json" />
|
||||||
<None Include="Resources\UserApi\UserGetTopAlbumsMultiple.json" />
|
<None Include="Resources\UserApi\UserGetTopAlbumsMultiple.json" />
|
||||||
<None Include="Resources\UserApi\UserGetTopAlbumsSingle.json" />
|
<None Include="Resources\UserApi\UserGetTopAlbumsSingle.json" />
|
||||||
|
<None Include="Resources\UserApi\UserGetTopArtistsEmpty.json" />
|
||||||
|
<None Include="Resources\UserApi\UserGetTopArtistsError.json" />
|
||||||
|
<None Include="Resources\UserApi\UserGetTopArtistsMultiple.json" />
|
||||||
|
<None Include="Resources\UserApi\UserGetTopArtistsSingle.json" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\IF.Lastfm.Core\IF.Lastfm.Core.csproj">
|
<ProjectReference Include="..\IF.Lastfm.Core\IF.Lastfm.Core.csproj">
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"topartists": {
|
||||||
|
"#text": "\n ",
|
||||||
|
"user": "e",
|
||||||
|
"type": "overall",
|
||||||
|
"page": "0",
|
||||||
|
"perPage": "1",
|
||||||
|
"totalPages": "0",
|
||||||
|
"total": "0"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"error": 6,
|
||||||
|
"message": "No user with that name",
|
||||||
|
"links": []
|
||||||
|
}
|
@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
"topartists": {
|
||||||
|
"artist": [
|
||||||
|
{
|
||||||
|
"name": "Anathema",
|
||||||
|
"playcount": "5216",
|
||||||
|
"mbid": "20aa23e3-3532-42ca-acf6-e8c2e9df2688",
|
||||||
|
"url": "http://www.last.fm/music/Anathema",
|
||||||
|
"streamable": "0",
|
||||||
|
"image": [
|
||||||
|
{
|
||||||
|
"#text": "http://userserve-ak.last.fm/serve/34/12571597.jpg",
|
||||||
|
"size": "small"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"#text": "http://userserve-ak.last.fm/serve/64/12571597.jpg",
|
||||||
|
"size": "medium"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"#text": "http://userserve-ak.last.fm/serve/126/12571597.jpg",
|
||||||
|
"size": "large"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"#text": "http://userserve-ak.last.fm/serve/252/12571597.jpg",
|
||||||
|
"size": "extralarge"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"#text": "http://userserve-ak.last.fm/serve/_/12571597/Anathema+Judgement+promo.jpg",
|
||||||
|
"size": "mega"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"@attr": {
|
||||||
|
"rank": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Insomnium",
|
||||||
|
"playcount": "4670",
|
||||||
|
"mbid": "c1f8e226-75ea-4fe6-83ce-59c122bcbca4",
|
||||||
|
"url": "http://www.last.fm/music/Insomnium",
|
||||||
|
"streamable": "0",
|
||||||
|
"image": [
|
||||||
|
{
|
||||||
|
"#text": "http://userserve-ak.last.fm/serve/34/70409268.jpg",
|
||||||
|
"size": "small"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"#text": "http://userserve-ak.last.fm/serve/64/70409268.jpg",
|
||||||
|
"size": "medium"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"#text": "http://userserve-ak.last.fm/serve/126/70409268.jpg",
|
||||||
|
"size": "large"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"#text": "http://userserve-ak.last.fm/serve/252/70409268.jpg",
|
||||||
|
"size": "extralarge"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"#text": "http://userserve-ak.last.fm/serve/500/70409268/Insomnium.jpg",
|
||||||
|
"size": "mega"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"@attr": {
|
||||||
|
"rank": "2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"@attr": {
|
||||||
|
"user": "Aurvandil",
|
||||||
|
"type": "overall",
|
||||||
|
"page": "1",
|
||||||
|
"perPage": "2",
|
||||||
|
"totalPages": "562",
|
||||||
|
"total": "1124"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"topartists": {
|
||||||
|
"artist": {
|
||||||
|
"name": "Anathema",
|
||||||
|
"playcount": "5216",
|
||||||
|
"mbid": "20aa23e3-3532-42ca-acf6-e8c2e9df2688",
|
||||||
|
"url": "http://www.last.fm/music/Anathema",
|
||||||
|
"streamable": "0",
|
||||||
|
"image": [
|
||||||
|
{
|
||||||
|
"#text": "http://userserve-ak.last.fm/serve/34/12571597.jpg",
|
||||||
|
"size": "small"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"#text": "http://userserve-ak.last.fm/serve/64/12571597.jpg",
|
||||||
|
"size": "medium"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"#text": "http://userserve-ak.last.fm/serve/126/12571597.jpg",
|
||||||
|
"size": "large"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"#text": "http://userserve-ak.last.fm/serve/252/12571597.jpg",
|
||||||
|
"size": "extralarge"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"#text": "http://userserve-ak.last.fm/serve/_/12571597/Anathema+Judgement+promo.jpg",
|
||||||
|
"size": "mega"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"@attr": {
|
||||||
|
"rank": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@attr": {
|
||||||
|
"user": "Aurvandil",
|
||||||
|
"type": "overall",
|
||||||
|
"page": "1",
|
||||||
|
"perPage": "1",
|
||||||
|
"totalPages": "1124",
|
||||||
|
"total": "1124"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// This code was generated by a tool.
|
// This code was generated by a tool.
|
||||||
// Runtime Version:4.0.30319.0
|
// Runtime Version:4.0.30319.34014
|
||||||
//
|
//
|
||||||
// Changes to this file may cause incorrect behavior and will be lost if
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
// the code is regenerated.
|
// the code is regenerated.
|
||||||
@ -169,5 +169,45 @@ public static byte[] UserGetTopAlbumsSingle {
|
|||||||
return ((byte[])(obj));
|
return ((byte[])(obj));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Byte[].
|
||||||
|
/// </summary>
|
||||||
|
public static byte[] UserGetTopArtistsEmpty {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("UserGetTopArtistsEmpty", resourceCulture);
|
||||||
|
return ((byte[])(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Byte[].
|
||||||
|
/// </summary>
|
||||||
|
public static byte[] UserGetTopArtistsError {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("UserGetTopArtistsError", resourceCulture);
|
||||||
|
return ((byte[])(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Byte[].
|
||||||
|
/// </summary>
|
||||||
|
public static byte[] UserGetTopArtistsMultiple {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("UserGetTopArtistsMultiple", resourceCulture);
|
||||||
|
return ((byte[])(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Byte[].
|
||||||
|
/// </summary>
|
||||||
|
public static byte[] UserGetTopArtistsSingle {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("UserGetTopArtistsSingle", resourceCulture);
|
||||||
|
return ((byte[])(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -151,4 +151,16 @@
|
|||||||
<data name="UserGetTopAlbumsSingle" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="UserGetTopAlbumsSingle" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>userapi\usergettopalbumssingle.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>userapi\usergettopalbumssingle.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="UserGetTopArtistsEmpty" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>UserApi\UserGetTopArtistsEmpty.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name="UserGetTopArtistsError" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>UserApi\UserGetTopArtistsError.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name="UserGetTopArtistsMultiple" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>UserApi\UserGetTopArtistsMultiple.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name="UserGetTopArtistsSingle" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>UserApi\UserGetTopArtistsSingle.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
51
src/IF.Lastfm.Core/Api/Commands/User/GetTopArtistsCommand.cs
Normal file
51
src/IF.Lastfm.Core/Api/Commands/User/GetTopArtistsCommand.cs
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
using System.Net.Http;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using IF.Lastfm.Core.Api.Enums;
|
||||||
|
using IF.Lastfm.Core.Api.Helpers;
|
||||||
|
using IF.Lastfm.Core.Objects;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace IF.Lastfm.Core.Api.Commands.User
|
||||||
|
{
|
||||||
|
[ApiMethodName("user.getTopArtists")]
|
||||||
|
internal class GetTopArtistsCommand : GetAsyncCommandBase<PageResponse<LastArtist>>
|
||||||
|
{
|
||||||
|
public string Username { get; set; }
|
||||||
|
public LastStatsTimeSpan TimeSpan { get; set; }
|
||||||
|
|
||||||
|
public GetTopArtistsCommand(ILastAuth auth, string username, LastStatsTimeSpan span)
|
||||||
|
: base(auth)
|
||||||
|
{
|
||||||
|
Username = username;
|
||||||
|
TimeSpan = span;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetParameters()
|
||||||
|
{
|
||||||
|
Parameters.Add("user", Username);
|
||||||
|
Parameters.Add("period", TimeSpan.GetApiName());
|
||||||
|
|
||||||
|
AddPagingParameters();
|
||||||
|
DisableCaching();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async override Task<PageResponse<LastArtist>> HandleResponse(HttpResponseMessage response)
|
||||||
|
{
|
||||||
|
var json = await response.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
|
LastResponseStatus status;
|
||||||
|
if (LastFm.IsResponseValid(json, out status) && response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var jtoken = JsonConvert.DeserializeObject<JToken>(json);
|
||||||
|
var topArtistsToken = jtoken.SelectToken("topartists");
|
||||||
|
var itemsToken = topArtistsToken.SelectToken("artist");
|
||||||
|
var pageInfoToken = topArtistsToken.SelectToken("@attr");
|
||||||
|
|
||||||
|
return PageResponse<LastArtist>.CreateSuccessResponse(itemsToken, pageInfoToken, LastArtist.ParseJToken, LastPageResultsType.Attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return LastResponse.CreateErrorResponse<PageResponse<LastArtist>>(status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -19,6 +19,11 @@ Task<PageResponse<LastAlbum>> GetTopAlbums(string username,
|
|||||||
int startIndex = 0,
|
int startIndex = 0,
|
||||||
int endIndex = LastFm.DefaultPageLength);
|
int endIndex = LastFm.DefaultPageLength);
|
||||||
|
|
||||||
|
Task<PageResponse<LastArtist>> GetTopArtists(string username,
|
||||||
|
LastStatsTimeSpan span,
|
||||||
|
int pagenumber = 0,
|
||||||
|
int count = LastFm.DefaultPageLength);
|
||||||
|
|
||||||
Task<PageResponse<LastTrack>> GetRecentScrobbles(string username, DateTimeOffset? since = null, int pagenumber = 0, int count = LastFm.DefaultPageLength);
|
Task<PageResponse<LastTrack>> GetRecentScrobbles(string username, DateTimeOffset? since = null, int pagenumber = 0, int count = LastFm.DefaultPageLength);
|
||||||
|
|
||||||
Task<PageResponse<LastStation>> GetRecentStations(string username,
|
Task<PageResponse<LastStation>> GetRecentStations(string username,
|
||||||
|
@ -42,6 +42,18 @@ public async Task<PageResponse<LastAlbum>> GetTopAlbums(string username, LastSta
|
|||||||
return await command.ExecuteAsync();
|
return await command.ExecuteAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<PageResponse<LastArtist>> GetTopArtists(string username, LastStatsTimeSpan span, int pagenumber = 0, int count = LastFm.DefaultPageLength)
|
||||||
|
{
|
||||||
|
var command = new GetTopArtistsCommand(Auth, username, span)
|
||||||
|
{
|
||||||
|
Page = pagenumber,
|
||||||
|
Count = count,
|
||||||
|
HttpClient = HttpClient
|
||||||
|
};
|
||||||
|
|
||||||
|
return await command.ExecuteAsync();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a list of recent scrobbled tracks for this user in reverse date order.
|
/// Gets a list of recent scrobbled tracks for this user in reverse date order.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -68,6 +68,7 @@
|
|||||||
<Compile Include="Api\Commands\Track\UpdateNowPlayingCommand.cs" />
|
<Compile Include="Api\Commands\Track\UpdateNowPlayingCommand.cs" />
|
||||||
<Compile Include="Api\Commands\UnauthenticatedPostAsyncCommandBase.cs" />
|
<Compile Include="Api\Commands\UnauthenticatedPostAsyncCommandBase.cs" />
|
||||||
<Compile Include="Api\Commands\User\GetRecommendedArtistsCommand.cs" />
|
<Compile Include="Api\Commands\User\GetRecommendedArtistsCommand.cs" />
|
||||||
|
<Compile Include="Api\Commands\User\GetTopArtistsCommand.cs" />
|
||||||
<Compile Include="Api\ILibraryApi.cs" />
|
<Compile Include="Api\ILibraryApi.cs" />
|
||||||
<Compile Include="Api\ITagApi.cs" />
|
<Compile Include="Api\ITagApi.cs" />
|
||||||
<Compile Include="Api\LastfmClient.cs" />
|
<Compile Include="Api\LastfmClient.cs" />
|
||||||
|
Loading…
Reference in New Issue
Block a user