Added GetLovedTracksCommand.cs (#110)

Added GetLovedTracksCommand.cs Added json for testing it, and Unit
Tests. Modified UserApi and IUserApi to add
This commit is contained in:
David Merryman 2018-04-27 06:21:37 -04:00 committed by Rikki Tooley
parent 9f11c2e407
commit 318b3795b2
10 changed files with 990 additions and 1 deletions

View File

@ -0,0 +1,93 @@
using IF.Lastfm.Core.Api.Enums;
using IF.Lastfm.Core.Objects;
using IF.Lastfm.Core.Tests.Resources;
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using IF.Lastfm.Core.Api.Commands.User;
using Newtonsoft.Json.Linq;
namespace IF.Lastfm.Core.Tests.Api.Commands
{
using System.Web.Configuration;
class UserGetLovedTracksCommandTests : CommandTestsBase
{
[Test]
public async Task HandleResponseMultiple()
{
var command = new GetLovedTracksCommand(MAuth.Object, "rj")
{
Count = 3
};
var expectedTrack = new LastTrack
{
ArtistName = "The Rolling Stones",
TimePlayed = new DateTime(2014, 12, 19, 16, 16, 56, DateTimeKind.Utc),
Mbid = "3dde65c8-22c3-4637-b67e-b234177c847b",
Name = "Love in Vain",
ArtistMbid = "b071f9fa-14b0-4217-8e97-eb41da73f598",
AlbumName = "Let It Bleed",
Url = new Uri("http://www.last.fm/music/The+Rolling+Stones/_/Love+in+Vain"),
Images = new LastImageSet(
"http://userserve-ak.last.fm/serve/34s/101739037.png",
"http://userserve-ak.last.fm/serve/64s/101739037.png",
"http://userserve-ak.last.fm/serve/126/101739037.png",
"http://userserve-ak.last.fm/serve/300x300/101739037.png")
};
var response = CreateResponseMessage(Encoding.UTF8.GetString(UserApiResponses.UserGetLovedTracksMultiple));
var actual = await command.HandleResponse(response);
Assert.IsTrue(actual.Success);
TestHelper.AssertSerialiseEqual(expectedTrack, actual.Content[1]);
}
[Test]
public async Task HandleResponseSingle()
{
var command = new GetLovedTracksCommand(MAuth.Object, "rj")
{
Count = 1
};
var expectedTrack = new LastTrack
{
ArtistName = "Rick James",
Mbid = "",
Name = "Super Freak (Part 1) - 1981 Single Version",
ArtistMbid = "cba9cec2-be8d-41bd-91b4-a1cd7de39b0c",
TimePlayed = new DateTime(2014, 12, 20, 10, 16, 52, DateTimeKind.Utc),
AlbumName = "The Definitive Collection",
Url = new Uri("http://www.last.fm/music/Rick+James/_/Super+Freak+(Part+1)+-+1981+Single+Version", UriKind.Absolute),
Images = new LastImageSet(
"http://userserve-ak.last.fm/serve/34s/90462319.jpg",
"http://userserve-ak.last.fm/serve/64s/90462319.jpg",
"http://userserve-ak.last.fm/serve/126/90462319.jpg",
"http://userserve-ak.last.fm/serve/300x300/90462319.jpg")
};
var response = CreateResponseMessage(Encoding.UTF8.GetString(UserApiResponses.UserGetLovedTracksSingle));
var actual = await command.HandleResponse(response);
Assert.IsTrue(actual.Success);
TestHelper.AssertSerialiseEqual(expectedTrack, actual.Single());
}
[Test]
public async Task HandleErrorResponse()
{
var command = new GetRecentTracksCommand(MAuth.Object, "rj")
{
Count = 1
};
var response = CreateResponseMessage(Encoding.UTF8.GetString(UserApiResponses.UserGetRecentTracksError));
var parsed = await command.HandleResponse(response);
Assert.IsFalse(parsed.Success);
Assert.IsTrue(parsed.Status == LastResponseStatus.MissingParameters);
}
}
}

View File

@ -97,6 +97,7 @@
<Compile Include="Api\Commands\TrackApi\GetTrackShoutsCommandTests.cs" />
<Compile Include="Api\Commands\Artist\GetInfoCommandTests.cs" />
<Compile Include="Api\Commands\TrackScrobbleCommandTests.cs" />
<Compile Include="Api\Commands\UserGetLovedTracksCommandTests.cs" />
<Compile Include="Api\Commands\UserGetRecentTracksCommandTests.cs" />
<Compile Include="Api\Commands\UserGetRecommendedArtistsCommandTests.cs" />
<Compile Include="Api\Commands\UserGetTopAlbumsCommandTests.cs" />
@ -199,6 +200,9 @@
<None Include="Resources\TrackApi\TrackScrobbleSuccess2.json" />
<None Include="Resources\TrackApi\TrackScrobbleSuccessNoAlbumProperty.json" />
<None Include="Resources\TrackApi\TrackScrobbleSuccess.json" />
<None Include="Resources\UserApi\UserGetLovedTracksError.json" />
<None Include="Resources\UserApi\UserGetLovedTracksMultiple.json" />
<None Include="Resources\UserApi\UserGetLovedTracksSingle.json" />
<None Include="Resources\UserApi\UserGetRecentTracksEmpty.json" />
<None Include="Resources\UserApi\UserGetRecentTracksError.json" />
<None Include="Resources\UserApi\UserGetRecentTracksMissing.json" />

View File

@ -0,0 +1,5 @@
{
"error": 6,
"message": "Invalid parameters - Your request is missing the [user] parameter",
"links": []
}

View File

@ -0,0 +1,733 @@
{
"lovedtracks": {
"track": [
{
"artist": {
"#text": "Santana",
"mbid": "1bc6816a-d056-4113-9b0a-6c52e5c31a3c"
},
"name": "No One to Depend On",
"streamable": "0",
"mbid": "3f8ed8da-dcc6-43dc-8266-3663007261a6",
"album": {
"#text": "Santana (III)",
"mbid": ""
},
"url": "http://www.last.fm/music/Santana/_/No+One+to+Depend+On",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/99461493.jpg",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/99461493.jpg",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/99461493.jpg",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/99461493.jpg",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 16:21",
"uts": "1419006075"
}
},
{
"artist": {
"#text": "The Rolling Stones",
"mbid": "b071f9fa-14b0-4217-8e97-eb41da73f598"
},
"name": "Love in Vain",
"streamable": "0",
"mbid": "3dde65c8-22c3-4637-b67e-b234177c847b",
"album": {
"#text": "Let It Bleed",
"mbid": "8bc2f5e2-122a-42db-b86c-fddedc77463a"
},
"url": "http://www.last.fm/music/The+Rolling+Stones/_/Love+in+Vain",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/101739037.png",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/101739037.png",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/101739037.png",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/101739037.png",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 16:16",
"uts": "1419005816"
}
},
{
"artist": {
"#text": "The Who",
"mbid": "9fdaa16b-a6c4-4831-b87c-bc9ca8ce7eaa"
},
"name": "Pinball Wizard",
"streamable": "0",
"mbid": "79f3dc97-2297-47ee-8556-9a1bb4b48d53",
"album": {
"#text": "Tommy (Remastered)",
"mbid": ""
},
"url": "http://www.last.fm/music/The+Who/_/Pinball+Wizard",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/35234991.jpg",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/35234991.jpg",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/35234991.jpg",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/35234991.jpg",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 16:13",
"uts": "1419005635"
}
},
{
"artist": {
"#text": "Cream",
"mbid": "04cd0cfd-bfd1-4c36-bc38-95c35e2c045f"
},
"name": "I'm So Glad",
"streamable": "0",
"mbid": "3dc91be5-c7ab-4af3-9557-19eb8e054d5a",
"album": {
"#text": "Fresh Cream (Remastered)",
"mbid": ""
},
"url": "http://www.last.fm/music/Cream/_/I%27m+So+Glad",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/89387215.jpg",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/89387215.jpg",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/89387215.jpg",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/89387215.jpg",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 16:09",
"uts": "1419005395"
}
},
{
"artist": {
"#text": "The Yardbirds",
"mbid": "191de76f-a224-445d-b041-54df16d65bf7"
},
"name": "Smokestack Lightning",
"streamable": "0",
"mbid": "580b35c9-b701-43d7-9ec3-6bd6f01534c2",
"album": {
"#text": "Five Live Yardbirds",
"mbid": "3fda56ac-efe1-4a26-9c86-116f5cc4b721"
},
"url": "http://www.last.fm/music/The+Yardbirds/_/Smokestack+Lightning",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/91925037.jpg",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/91925037.jpg",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/91925037.jpg",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/91925037.jpg",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 16:04",
"uts": "1419005063"
}
},
{
"artist": {
"#text": "Canned Heat",
"mbid": "815a0279-558c-4522-ac3b-6a1e259e95b5"
},
"name": "One Kind Favor",
"streamable": "0",
"mbid": "5bde419b-9e93-46c6-baf5-ef58a0b3bb73",
"album": {
"#text": "Living The Blues",
"mbid": "ec82ab15-8c01-4aa0-810c-d184d20f229b"
},
"url": "http://www.last.fm/music/Canned+Heat/_/One+Kind+Favor",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/100370719.jpg",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/100370719.jpg",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/100370719.jpg",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/100370719.jpg",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 15:59",
"uts": "1419004779"
}
},
{
"artist": {
"#text": "Cream",
"mbid": "04cd0cfd-bfd1-4c36-bc38-95c35e2c045f"
},
"name": "Politician",
"streamable": "0",
"mbid": "f2c2760c-ea5c-4ca0-8a8b-4199a41ffba0",
"album": {
"#text": "Wheels of Fire (Remastered)",
"mbid": ""
},
"url": "http://www.last.fm/music/Cream/_/Politician",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/75021714.jpg",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/75021714.jpg",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/75021714.jpg",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/75021714.jpg",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 15:55",
"uts": "1419004522"
}
},
{
"artist": {
"#text": "The Doors",
"mbid": "9efff43b-3b29-4082-824e-bc82f646f93d"
},
"name": "Light My Fire",
"streamable": "0",
"mbid": "05b7cd66-a700-4aa1-baf3-e1e41388f3cf",
"album": {
"#text": "The Doors",
"mbid": "8f3cf206-35f6-3c77-925e-766bdfbf6333"
},
"url": "http://www.last.fm/music/The+Doors/_/Light+My+Fire",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/88289473.png",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/88289473.png",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/88289473.png",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/88289473.png",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 15:48",
"uts": "1419004096"
}
},
{
"artist": {
"#text": "Full Metal Hammer",
"mbid": ""
},
"name": "Since Ive Been Loving You",
"streamable": "0",
"mbid": "",
"album": {
"#text": "It's A Full Metal Hammer Thing",
"mbid": ""
},
"url": "http://www.last.fm/music/Full+Metal+Hammer/_/Since+Ive+Been+Loving+You",
"image": [
{
"#text": "",
"size": "small"
},
{
"#text": "",
"size": "medium"
},
{
"#text": "",
"size": "large"
},
{
"#text": "",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 15:41",
"uts": "1419003662"
}
},
{
"artist": {
"#text": "The Jimi Hendrix Experience",
"mbid": "33b3c323-77c2-417c-a5b4-af7e6a111cc9"
},
"name": "Burning Of The Midnight Lamp",
"streamable": "0",
"mbid": "1a1c8a21-351d-4c43-8ed4-3fd3f5058e1b",
"album": {
"#text": "Electric Ladyland",
"mbid": "9fa7f446-b15c-3ad9-a4cc-3348e9140319"
},
"url": "http://www.last.fm/music/The+Jimi+Hendrix+Experience/_/Burning+Of+The+Midnight+Lamp",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/96516997.png",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/96516997.png",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/96516997.png",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/96516997.png",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 15:37",
"uts": "1419003443"
}
},
{
"artist": {
"#text": "Otis Rush",
"mbid": "40ee7c92-f44a-4d14-9aee-f87244465ee4"
},
"name": "Double Trouble",
"streamable": "0",
"mbid": "f23c009e-19c4-4196-8fe2-236c28546bfc",
"album": {
"#text": "Live At Montreux 1986",
"mbid": ""
},
"url": "http://www.last.fm/music/Otis+Rush/_/Double+Trouble",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/91112769.jpg",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/91112769.jpg",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/91112769.jpg",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/91112769.jpg",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 15:32",
"uts": "1419003132"
}
},
{
"artist": {
"#text": "The Yardbirds",
"mbid": "191de76f-a224-445d-b041-54df16d65bf7"
},
"name": "I Don't Care No More",
"streamable": "0",
"mbid": "30e22d26-15f7-4547-a0f4-b08feed1a7fc",
"album": {
"#text": "Rock Classics: Parable Of Arable Land",
"mbid": ""
},
"url": "http://www.last.fm/music/The+Yardbirds/_/I+Don%27t+Care+No+More",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/54760139.png",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/54760139.png",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/54760139.png",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/174s/54760139.png",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 15:28",
"uts": "1419002911"
}
},
{
"artist": {
"#text": "The Doors",
"mbid": "9efff43b-3b29-4082-824e-bc82f646f93d"
},
"name": "Crawling King Snake",
"streamable": "0",
"mbid": "a08905e0-dc59-47fe-ae93-be5bb0d22a84",
"album": {
"#text": "L.A. Woman",
"mbid": "492025d7-a5fd-40f0-94f9-8841e9078bb3"
},
"url": "http://www.last.fm/music/The+Doors/_/Crawling+King+Snake",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/88488175.png",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/88488175.png",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/88488175.png",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/88488175.png",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 15:23",
"uts": "1419002612"
}
},
{
"artist": {
"#text": "Jimmy Page",
"mbid": "519774a4-3b18-4042-b8c0-927845a616c9"
},
"name": "Prison Blues",
"streamable": "0",
"mbid": "f78a2ce9-3dba-439c-9e05-0783ccfa40c3",
"album": {
"#text": "Outrider",
"mbid": "a53095c1-a6ea-4bc9-a14c-6ecafeef738e"
},
"url": "http://www.last.fm/music/Jimmy+Page/_/Prison+Blues",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/90138723.png",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/90138723.png",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/90138723.png",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/90138723.png",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 15:16",
"uts": "1419002181"
}
},
{
"artist": {
"#text": "Cream",
"mbid": "04cd0cfd-bfd1-4c36-bc38-95c35e2c045f"
},
"name": "Spoonful",
"streamable": "0",
"mbid": "f6f5d7f0-b368-45c0-8505-4b33ac696035",
"album": {
"#text": "Fresh Cream (Remastered)",
"mbid": ""
},
"url": "http://www.last.fm/music/Cream/_/Spoonful",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/89387215.jpg",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/89387215.jpg",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/89387215.jpg",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/89387215.jpg",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 15:09",
"uts": "1419001787"
}
},
{
"artist": {
"#text": "The Doors",
"mbid": "9efff43b-3b29-4082-824e-bc82f646f93d"
},
"name": "Back Door Man",
"streamable": "0",
"mbid": "1976f693-f35f-4534-b341-31d51f46b208",
"album": {
"#text": "The Doors",
"mbid": "8f3cf206-35f6-3c77-925e-766bdfbf6333"
},
"url": "http://www.last.fm/music/The+Doors/_/Back+Door+Man",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/88289473.png",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/88289473.png",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/88289473.png",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/88289473.png",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 15:06",
"uts": "1419001574"
}
},
{
"artist": {
"#text": "The Yardbirds",
"mbid": "191de76f-a224-445d-b041-54df16d65bf7"
},
"name": "I Ain't Got You",
"streamable": "0",
"mbid": "19ee6ab9-1716-41e1-8aa7-cada544f5695",
"album": {
"#text": "Five Live",
"mbid": ""
},
"url": "http://www.last.fm/music/The+Yardbirds/_/I+Ain%27t+Got+You",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/87032633.jpg",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/87032633.jpg",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/87032633.jpg",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/87032633.jpg",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 15:04",
"uts": "1419001453"
}
},
{
"artist": {
"#text": "The Who",
"mbid": "9fdaa16b-a6c4-4831-b87c-bc9ca8ce7eaa"
},
"name": "Substitute (Remixed Live At Leeds Version)",
"streamable": "0",
"mbid": "",
"album": {
"#text": "Live At Leeds (25th Anniversary Edition)",
"mbid": ""
},
"url": "http://www.last.fm/music/The+Who/_/Substitute+(Remixed+Live+At+Leeds+Version)",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/82286267.jpg",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/82286267.jpg",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/82286267.jpg",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/82286267.jpg",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 15:01",
"uts": "1419001281"
}
},
{
"artist": {
"#text": "Cream",
"mbid": "04cd0cfd-bfd1-4c36-bc38-95c35e2c045f"
},
"name": "Tales of Brave Ulysses",
"streamable": "0",
"mbid": "f5e62507-07f1-45eb-83c6-6742d5260d06",
"album": {
"#text": "Disraeli Gears (Remastered)",
"mbid": ""
},
"url": "http://www.last.fm/music/Cream/_/Tales+of+Brave+Ulysses",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/57500153.jpg",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/57500153.jpg",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/57500153.jpg",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/57500153.jpg",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 14:58",
"uts": "1419001115"
}
},
{
"artist": {
"#text": "Jimi Hendrix",
"mbid": "06fb1c8b-566e-4cb2-985b-b467c90781d4"
},
"name": "Johnny B. Goode (Live Berkeley Community Center, Berkeley, CA May 30, 1970)",
"streamable": "0",
"mbid": "",
"album": {
"#text": "In The West",
"mbid": ""
},
"url": "http://www.last.fm/music/Jimi+Hendrix/_/Johnny+B.+Goode+(Live+Berkeley+Community+Center,+Berkeley,+CA+May+30,+1970)",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/78579114.png",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/78579114.png",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/78579114.png",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/78579114.png",
"size": "extralarge"
}
],
"date": {
"#text": "19 Dec 2014, 14:53",
"uts": "1419000831"
}
}
],
"@attr": {
"user": "RJ",
"page": "0",
"perPage": "20",
"totalPages": "3827",
"total": "76526"
}
}
}

View File

@ -0,0 +1,47 @@
{
"lovedtracks": {
"track": {
"artist": {
"#text": "Rick James",
"mbid": "cba9cec2-be8d-41bd-91b4-a1cd7de39b0c"
},
"name": "Super Freak (Part 1) - 1981 Single Version",
"streamable": "0",
"mbid": "",
"album": {
"#text": "The Definitive Collection",
"mbid": "f22c19bf-1c88-4651-a0d3-8c50735f3c93"
},
"url": "http://www.last.fm/music/Rick+James/_/Super+Freak+(Part+1)+-+1981+Single+Version",
"image": [
{
"#text": "http://userserve-ak.last.fm/serve/34s/90462319.jpg",
"size": "small"
},
{
"#text": "http://userserve-ak.last.fm/serve/64s/90462319.jpg",
"size": "medium"
},
{
"#text": "http://userserve-ak.last.fm/serve/126/90462319.jpg",
"size": "large"
},
{
"#text": "http://userserve-ak.last.fm/serve/300x300/90462319.jpg",
"size": "extralarge"
}
],
"date": {
"#text": "20 Dec 2014, 10:16",
"uts": "1419070612"
}
},
"@attr": {
"user": "RJ",
"page": "0",
"perPage": "1",
"totalPages": "76536",
"total": "76536"
}
}
}

View File

@ -19,7 +19,7 @@ namespace IF.Lastfm.Core.Tests.Resources {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class UserApiResponses {
@ -60,6 +60,36 @@ internal UserApiResponses() {
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
public static byte[] UserGetLovedTracksError {
get {
object obj = ResourceManager.GetObject("UserGetLovedTracksError", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
public static byte[] UserGetLovedTracksMultiple {
get {
object obj = ResourceManager.GetObject("UserGetLovedTracksMultiple", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
public static byte[] UserGetLovedTracksSingle {
get {
object obj = ResourceManager.GetObject("UserGetLovedTracksSingle", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>

View File

@ -118,6 +118,15 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="UserGetLovedTracksError" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>UserApi\UserGetLovedTracksError.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="UserGetLovedTracksMultiple" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>UserApi\UserGetLovedTracksMultiple.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="UserGetLovedTracksSingle" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>UserApi\UserGetLovedTracksSingle.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="UserGetRecentTracksEmpty" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>userapi\usergetrecenttracksempty.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>

View File

@ -0,0 +1,52 @@
using System;
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.getLovedTracks")]
internal class GetLovedTracksCommand : GetAsyncCommandBase<PageResponse<LastTrack>>
{
public string Username { get; set; }
public GetLovedTracksCommand(ILastAuth auth, string username) : base(auth)
{
Username = username;
}
public override void SetParameters()
{
Parameters.Add("user", Username);
this.AddPagingParameters();
this.DisableCaching();
}
public override async Task<PageResponse<LastTrack>> 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).SelectToken("lovedtracks");
var itemsToken = jtoken.SelectToken("track");
var attrToken = jtoken.SelectToken("@attr");
return PageResponse<LastTrack>.CreateSuccessResponse(
itemsToken,
attrToken,
LastTrack.ParseJToken,
LastPageResultsType.Attr);
}
else
{
return LastResponse.CreateErrorResponse<PageResponse<LastTrack>>(status);
}
}
}
}

View File

@ -37,5 +37,7 @@ Task<PageResponse<LastShout>> GetShoutsAsync(string username,
Task<LastResponse<LastUser>> GetInfoAsync(string username);
Task<LastResponse> AddShoutAsync(string recipient, string message);
Task<PageResponse<LastTrack>> GetLovedTracks(string username, int pagenumber, int count);
}
}

View File

@ -118,5 +118,19 @@ public async Task<LastResponse> AddShoutAsync(string recipient, string message)
return await command.ExecuteAsync();
}
public async Task<PageResponse<LastTrack>> GetLovedTracks(
string username,
int pagenumber = 1,
int count = LastFm.DefaultPageLength)
{
var command = new GetLovedTracksCommand(auth: Auth, username: username)
{
Page = pagenumber,
Count = count,
HttpClient = HttpClient
};
return await command.ExecuteAsync();
}
}
}