Merge pull request #62 from kasthack/master

library.removeTrack, library.removeScrobble, LastResponseStatus parsing
This commit is contained in:
Rikki Tooley 2015-04-05 00:56:26 +01:00
commit e3139e98bd
9 changed files with 100 additions and 62 deletions

View File

@ -101,9 +101,9 @@ public async Task<PageResponse<LastShout>> GetShoutsForArtistAsync(string artist
return await command.ExecuteAsync();
}
public async Task<LastResponse> AddShoutAsync(string artistname, string messaage)
public async Task<LastResponse> AddShoutAsync(string artistname, string message)
{
var command = new AddShoutCommand(Auth, artistname, messaage);
var command = new AddShoutCommand(Auth, artistname, message);
return await command.ExecuteAsync();
}

View File

@ -0,0 +1,36 @@
using System;
using System.Net.Http;
using System.Threading.Tasks;
using IF.Lastfm.Core.Api.Helpers;
using IF.Lastfm.Core.Api.Enums;
using IF.Lastfm.Core.Objects;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
namespace IF.Lastfm.Core.Api.Commands.Library {
internal class RemoveScrobbleCommand : PostAsyncCommandBase<LastResponse> {
public string Artist { get; set; }
public string Track { get; set; }
public DateTimeOffset Timestamp { get; set; }
public RemoveScrobbleCommand( ILastAuth auth, string artist, string track, DateTimeOffset timestamp ) : base( auth ) {
Method = "library.removeScrobble";
Artist = artist;
Track = track;
Timestamp = timestamp;
}
public override void SetParameters() {
Parameters.Add( "artist", Artist );
Parameters.Add( "track", Track );
Parameters.Add( "timestamp", Timestamp.AsUnixTime().ToString() );
}
public async override Task<LastResponse> HandleResponse( HttpResponseMessage response ) {
return await LastResponse.HandleResponse( response );
}
}
}

View File

@ -0,0 +1,28 @@
using System.Net.Http;
using System.Threading.Tasks;
using IF.Lastfm.Core.Api.Helpers;
namespace IF.Lastfm.Core.Api.Commands.Library {
internal class RemoveTrackCommand : PostAsyncCommandBase<LastResponse> {
public string Artist { get; set; }
public string Track { get; set; }
public RemoveTrackCommand( ILastAuth auth, string artist, string track) : base( auth ) {
Method = "library.removeTrack";
Artist = artist;
Track = track;
}
public override void SetParameters() {
Parameters.Add( "artist", Artist );
Parameters.Add( "track", Track );
}
public async override Task<LastResponse> HandleResponse( HttpResponseMessage response ) {
return await LastResponse.HandleResponse( response );
}
}
}

View File

@ -22,72 +22,72 @@ public enum LastResponseStatus
/// <summary>
/// The service requested does not exist (2)
/// </summary>
BadService,
BadService = 2,
/// <summary>
/// The method requested does not exist in this service (3)
/// </summary>
BadMethod,
BadMethod = 3,
/// <summary>
/// This credential does not have permission to access the service requested (4)
/// </summary>
BadAuth,
BadAuth = 4,
/// <summary>
/// This service doesn't exist in the requested format
/// </summary>
BadFormat,
BadFormat = 5,
/// <summary>
/// Required parameters were missing from the request (6)
/// </summary>
MissingParameters,
MissingParameters = 6,
/// <summary>
/// The requested resource is invalid (7)
/// </summary>
BadResource,
BadResource = 7,
/// <summary>
/// An unknown failure occured when creating the response (8)
/// </summary>
Failure,
Failure = 8,
/// <summary>
/// The session has expired, reauthenticate before retrying (9)
/// </summary>
SessionExpired,
SessionExpired = 9,
/// <summary>
/// The provided API key was invalid (10)
/// </summary>
BadApiKey,
BadApiKey = 10,
/// <summary>
/// This service is temporarily offline, retry later (11)
/// </summary>
ServiceDown,
ServiceDown = 11,
/// <summary>
/// The request signature was invalid. Check that your API key and secret are valid. (13)
/// You can generate new keys at http://www.last.fm/api/accounts
/// </summary>
BadMethodSignature,
BadMethodSignature = 13,
/// <summary>
/// There was a temporary error while processing the request, retry later (16)
/// </summary>
TemporaryFailure,
TemporaryFailure = 16,
/// <summary>
/// This API key has been suspended, please generate a new key at http://www.last.fm/api/accounts (26)
/// </summary>
KeySuspended,
KeySuspended = 26,
/// <summary>
/// This API key has been rate-limited because too many requests have been made in a short period. Retry later (29)
/// </summary>
RateLimited
RateLimited = 29
}
}

View File

@ -43,7 +43,7 @@ Task<PageResponse<LastShout>> GetShoutsForArtistAsync(string artistname,
int count = LastFm.DefaultPageLength,
bool autocorrect = false);
Task<LastResponse> AddShoutAsync(string artistname, string messaage);
Task<LastResponse> AddShoutAsync(string artistname, string message);
Task<PageResponse<LastArtist>> SearchForArtistAsync(string artistname,
int page = 1,

View File

@ -16,6 +16,11 @@ Task<PageResponse<LastTrack>> GetTracks(string username,
DateTimeOffset since,
int startIndex = 0,
int endIndex = LastFm.DefaultPageLength);
Task<LastResponse> RemoveScrobble(
string artist,
string track,
DateTimeOffset timestamp );
Task<LastResponse> RemoveTrack( string artist, string track );
}
}

View File

@ -8,8 +8,10 @@ namespace IF.Lastfm.Core.Api
{
public class LibraryApi : ILibraryApi
{
public LibraryApi( ILastAuth auth ) { Auth = auth; }
public ILastAuth Auth { get; private set; }
public async Task<PageResponse<LastTrack>> GetTracks(string username, string artist, string album, DateTimeOffset since, int pagenumber = 0, int count = LastFm.DefaultPageLength)
{
var command = new GetTracksCommand(Auth, username, artist, album, since)
@ -20,5 +22,14 @@ public async Task<PageResponse<LastTrack>> GetTracks(string username, string art
return await command.ExecuteAsync();
}
public async Task<LastResponse> RemoveScrobble( string artist, string track, DateTimeOffset timestamp ) {
var command = new RemoveScrobbleCommand( Auth, artist, track, timestamp );
return await command.ExecuteAsync();
}
public async Task<LastResponse> RemoveTrack( string artist, string track ) {
var command = new RemoveTrackCommand( Auth, artist, track );
return await command.ExecuteAsync();
}
}
}

View File

@ -61,6 +61,8 @@
<Compile Include="Api\Commands\Artist\GetTagsByUserCommand.cs" />
<Compile Include="Api\Commands\Artist\GetTopTagsCommand.cs" />
<Compile Include="Api\Commands\Library\GetTracksCommand.cs" />
<Compile Include="Api\Commands\Library\RemoveScrobbleCommand.cs" />
<Compile Include="Api\Commands\Library\RemoveTrackCommand.cs" />
<Compile Include="Api\Commands\Track\ScrobbleCommand.cs" />
<Compile Include="Api\Commands\Track\UpdateNowPlayingCommand.cs" />
<Compile Include="Api\Commands\UnauthenticatedPostAsyncCommandBase.cs" />

View File

@ -114,51 +114,7 @@ public static bool IsResponseValid(string json, out LastResponseStatus status)
int code;
if (Int32.TryParse(codeString, out code))
{
switch (code)
{
case 2:
status = LastResponseStatus.BadService;
break;
case 3:
status = LastResponseStatus.BadMethod;
break;
case 4:
status = LastResponseStatus.BadAuth;
break;
case 5:
status = LastResponseStatus.BadFormat;
break;
case 6:
status = LastResponseStatus.MissingParameters;
break;
case 7:
status = LastResponseStatus.BadResource;
break;
case 8:
status = LastResponseStatus.Failure;
break;
case 9:
status = LastResponseStatus.SessionExpired;
break;
case 10:
status = LastResponseStatus.BadApiKey;
break;
case 11:
status = LastResponseStatus.ServiceDown;
break;
case 13:
status = LastResponseStatus.BadMethodSignature;
break;
case 16:
status = LastResponseStatus.TemporaryFailure;
break;
case 26:
status = LastResponseStatus.KeySuspended;
break;
case 29:
status = LastResponseStatus.RateLimited;
break;
}
status = (LastResponseStatus) code;
}
return false;