mirror of
https://github.com/Sarsoo/IF.Lastfm.git
synced 2024-10-17 07:13:09 +01:00
user.getRecentStations now uses the new PostAsyncCommand pattern
This commit is contained in:
parent
99a61e50f8
commit
5134b6c2cc
47
IF.Lastfm.Core/Api/Commands/PostAsyncCommandBase.cs
Normal file
47
IF.Lastfm.Core/Api/Commands/PostAsyncCommandBase.cs
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace IF.Lastfm.Core.Api.Commands
|
||||||
|
{
|
||||||
|
internal abstract class PostAsyncCommandBase<T>
|
||||||
|
{
|
||||||
|
public string Method { get; protected set; }
|
||||||
|
public Uri Url { get; protected set; }
|
||||||
|
public IAuth Auth { get; protected set; }
|
||||||
|
|
||||||
|
public int Page { get; set; }
|
||||||
|
public int Count { get; set; }
|
||||||
|
|
||||||
|
protected PostAsyncCommandBase(IAuth auth)
|
||||||
|
{
|
||||||
|
Auth = auth;
|
||||||
|
Url = new Uri(LastFm.ApiRoot, UriKind.Absolute);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract Task<T> ExecuteAsync();
|
||||||
|
|
||||||
|
protected async Task<T> ExecuteInternal(Dictionary<string, string> parameters)
|
||||||
|
{
|
||||||
|
var apisig = Auth.GenerateMethodSignature(Method, parameters);
|
||||||
|
|
||||||
|
var postContent = LastFm.CreatePostBody(Method,
|
||||||
|
Auth.ApiKey,
|
||||||
|
apisig,
|
||||||
|
parameters);
|
||||||
|
|
||||||
|
var httpClient = new HttpClient();
|
||||||
|
var response = await httpClient.PostAsync(Url, postContent);
|
||||||
|
return await HandleResponse(response);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract Task<T> HandleResponse(HttpResponseMessage response);
|
||||||
|
|
||||||
|
protected void AddPagingParameters(Dictionary<string, string> parameters)
|
||||||
|
{
|
||||||
|
parameters.Add("page", Page.ToString());
|
||||||
|
parameters.Add("limit", Count.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
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.UserApi
|
||||||
|
{
|
||||||
|
internal class GetRecentStationsCommand : PostAsyncCommandBase<PageResponse<Station>>
|
||||||
|
{
|
||||||
|
public string Username { get; private set; }
|
||||||
|
|
||||||
|
public GetRecentStationsCommand(IAuth auth, string username) : base(auth)
|
||||||
|
{
|
||||||
|
Method = "user.getRecentStations";
|
||||||
|
Username = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async override Task<PageResponse<Station>> ExecuteAsync()
|
||||||
|
{
|
||||||
|
var parameters = new Dictionary<string, string>
|
||||||
|
{
|
||||||
|
{"user", Username},
|
||||||
|
{"sk", Auth.User.Token}
|
||||||
|
};
|
||||||
|
|
||||||
|
AddPagingParameters(parameters);
|
||||||
|
|
||||||
|
return await ExecuteInternal(parameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async override Task<PageResponse<Station>> HandleResponse(HttpResponseMessage response)
|
||||||
|
{
|
||||||
|
string json = await response.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
|
LastFmApiError error;
|
||||||
|
if (LastFm.IsResponseValid(json, out error) && response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
JToken jtoken = JsonConvert.DeserializeObject<JToken>(json).SelectToken("recentstations");
|
||||||
|
|
||||||
|
var stationsToken = jtoken.SelectToken("station");
|
||||||
|
|
||||||
|
var stations = stationsToken.Children().Select(Station.ParseJToken).ToList();
|
||||||
|
|
||||||
|
var pageresponse = PageResponse<Station>.CreateSuccessResponse(stations);
|
||||||
|
|
||||||
|
var attrToken = jtoken.SelectToken("@attr");
|
||||||
|
pageresponse.AddPageInfoFromJToken(attrToken);
|
||||||
|
|
||||||
|
return pageresponse;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return PageResponse<Station>.CreateErrorResponse(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -15,11 +15,13 @@ Task<PageResponse<Album>> GetTopAlbums(string username,
|
|||||||
int startIndex = 0,
|
int startIndex = 0,
|
||||||
int endIndex = LastFm.DefaultPageLength);
|
int endIndex = LastFm.DefaultPageLength);
|
||||||
|
|
||||||
Task<PageResponse<Track>> GetRecentScrobbles(string username, DateTime since,
|
Task<PageResponse<Track>> GetRecentScrobbles(string username,
|
||||||
|
DateTime since,
|
||||||
int startIndex = 0,
|
int startIndex = 0,
|
||||||
int endIndex = LastFm.DefaultPageLength);
|
int endIndex = LastFm.DefaultPageLength);
|
||||||
|
|
||||||
Task<PageResponse<Station>> GetRecentStations(int pagenumber,
|
Task<PageResponse<Station>> GetRecentStations(string username,
|
||||||
|
int pagenumber,
|
||||||
int count = LastFm.DefaultPageLength);
|
int count = LastFm.DefaultPageLength);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -59,8 +59,16 @@ public async Task<PageResponse<Track>> GetRecentScrobbles(string username, DateT
|
|||||||
return await command.ExecuteAsync();
|
return await command.ExecuteAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<PageResponse<Station>> GetRecentStations(int pagenumber = 0, int count = LastFm.DefaultPageLength)
|
public async Task<PageResponse<Station>> GetRecentStations(string username, int pagenumber = 0, int count = LastFm.DefaultPageLength)
|
||||||
{
|
{
|
||||||
|
var command = new GetRecentStationsCommand(Auth, username)
|
||||||
|
{
|
||||||
|
Page = pagenumber,
|
||||||
|
Count = count
|
||||||
|
};
|
||||||
|
|
||||||
|
return await command.ExecuteAsync();
|
||||||
|
|
||||||
const string apiMethod = "user.getRecentStations";
|
const string apiMethod = "user.getRecentStations";
|
||||||
|
|
||||||
var methodParameters = new Dictionary<string, string>
|
var methodParameters = new Dictionary<string, string>
|
||||||
|
@ -44,9 +44,11 @@
|
|||||||
<Compile Include="Api\Commands\AlbumApi\GetAbumInfoCommand.cs" />
|
<Compile Include="Api\Commands\AlbumApi\GetAbumInfoCommand.cs" />
|
||||||
<Compile Include="Api\Commands\ArtistApi\GetArtistInfoCommand.cs" />
|
<Compile Include="Api\Commands\ArtistApi\GetArtistInfoCommand.cs" />
|
||||||
<Compile Include="Api\Commands\GetAsyncCommandBase.cs" />
|
<Compile Include="Api\Commands\GetAsyncCommandBase.cs" />
|
||||||
|
<Compile Include="Api\Commands\PostAsyncCommandBase.cs" />
|
||||||
<Compile Include="Api\Commands\TrackApi\GetTrackInfoCommand.cs" />
|
<Compile Include="Api\Commands\TrackApi\GetTrackInfoCommand.cs" />
|
||||||
<Compile Include="Api\Commands\TrackApi\GetTrackShoutsCommand.cs" />
|
<Compile Include="Api\Commands\TrackApi\GetTrackShoutsCommand.cs" />
|
||||||
<Compile Include="Api\Commands\UserApi\GetRecentScrobblesCommand.cs" />
|
<Compile Include="Api\Commands\UserApi\GetRecentScrobblesCommand.cs" />
|
||||||
|
<Compile Include="Api\Commands\UserApi\GetRecentStationsCommand.cs" />
|
||||||
<Compile Include="Api\Commands\UserApi\GetTopAlbumsCommand.cs" />
|
<Compile Include="Api\Commands\UserApi\GetTopAlbumsCommand.cs" />
|
||||||
<Compile Include="Api\Helpers\ApiExtensions.cs" />
|
<Compile Include="Api\Helpers\ApiExtensions.cs" />
|
||||||
<Compile Include="Api\Helpers\ApiNameAttribute.cs" />
|
<Compile Include="Api\Helpers\ApiNameAttribute.cs" />
|
||||||
|
@ -101,7 +101,7 @@ public async Task GetRecentStations()
|
|||||||
|
|
||||||
var userApi = new Core.Api.UserApi(Auth);
|
var userApi = new Core.Api.UserApi(Auth);
|
||||||
|
|
||||||
var response = await userApi.GetRecentStations(_stationPageProgress.ExpectedPage, 5);
|
var response = await userApi.GetRecentStations(Auth.User.Username, _stationPageProgress.ExpectedPage, 5);
|
||||||
|
|
||||||
_stationPageProgress.PageLoaded(response.Success);
|
_stationPageProgress.PageLoaded(response.Success);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user