Merge pull request #20 from zumicts/master

Fixing more page response apis
This commit is contained in:
Rikki Tooley 2014-10-11 17:06:39 +01:00
commit cac461b22c
9 changed files with 39 additions and 88 deletions

View File

@ -31,30 +31,15 @@ public override void SetParameters()
public async override Task<PageResponse<LastAlbum>> HandleResponse(HttpResponseMessage response) public async override Task<PageResponse<LastAlbum>> HandleResponse(HttpResponseMessage response)
{ {
string json = await response.Content.ReadAsStringAsync(); var json = await response.Content.ReadAsStringAsync();
LastFmApiError error; LastFmApiError error;
if (LastFm.IsResponseValid(json, out error) && response.IsSuccessStatusCode) if (!LastFm.IsResponseValid(json, out error) || !response.IsSuccessStatusCode)
{
var jtoken = JsonConvert.DeserializeObject<JToken>(json);
var albums = jtoken.SelectToken("results")
.SelectToken("albummatches")
.SelectToken("album")
.Children().Select(LastAlbum.ParseJToken)
.ToList();
var pageresponse = PageResponse<LastAlbum>.CreateSuccessResponse(albums);
var attrToken = jtoken.SelectToken("results");
pageresponse.AddPageInfoFromOpenQueryJToken(attrToken);
return pageresponse;
}
else
{
return LastResponse.CreateErrorResponse<PageResponse<LastAlbum>>(error); return LastResponse.CreateErrorResponse<PageResponse<LastAlbum>>(error);
}
var jtoken = JsonConvert.DeserializeObject<JToken>(json).SelectToken("results");
return PageResponse<LastAlbum>.CreatePageResponse(jtoken.SelectToken("albumsmatches").SelectToken("album"),
jtoken, LastAlbum.ParseJToken, true);
} }
} }
} }

View File

@ -30,30 +30,15 @@ public override void SetParameters()
public async override Task<PageResponse<LastArtist>> HandleResponse(HttpResponseMessage response) public async override Task<PageResponse<LastArtist>> HandleResponse(HttpResponseMessage response)
{ {
string json = await response.Content.ReadAsStringAsync(); var json = await response.Content.ReadAsStringAsync();
LastFmApiError error; LastFmApiError error;
if (LastFm.IsResponseValid(json, out error) && response.IsSuccessStatusCode) if (!LastFm.IsResponseValid(json, out error) || !response.IsSuccessStatusCode)
{
var jtoken = JsonConvert.DeserializeObject<JToken>(json);
var artists = jtoken.SelectToken("results")
.SelectToken("artistmatches")
.SelectToken("artist")
.Children().Select(LastArtist.ParseJToken)
.ToList();
var pageresponse = PageResponse<LastArtist>.CreateSuccessResponse(artists);
var attrToken = jtoken.SelectToken("results");
pageresponse.AddPageInfoFromOpenQueryJToken(attrToken);
return pageresponse;
}
else
{
return LastResponse.CreateErrorResponse<PageResponse<LastArtist>>(error); return LastResponse.CreateErrorResponse<PageResponse<LastArtist>>(error);
}
var jtoken = JsonConvert.DeserializeObject<JToken>(json).SelectToken("results");
return PageResponse<LastArtist>.CreatePageResponse(jtoken.SelectToken("artistsmatches").SelectToken("artist"),
jtoken, LastArtist.ParseJToken, true);
} }
} }
} }

View File

@ -28,29 +28,15 @@ public override void SetParameters()
public async override Task<PageResponse<LastArtist>> HandleResponse(HttpResponseMessage response) public async override Task<PageResponse<LastArtist>> HandleResponse(HttpResponseMessage response)
{ {
string json = await response.Content.ReadAsStringAsync(); var json = await response.Content.ReadAsStringAsync();
LastFmApiError error; LastFmApiError error;
if (LastFm.IsResponseValid(json, out error) && response.IsSuccessStatusCode) if (!LastFm.IsResponseValid(json, out error) || !response.IsSuccessStatusCode)
{
var jtoken = JsonConvert.DeserializeObject<JToken>(json);
var artists = jtoken.SelectToken("artists")
.SelectToken("artist").Children()
.Select(LastArtist.ParseJToken)
.ToList();
var pageresponse = PageResponse<LastArtist>.CreateSuccessResponse(artists);
var attrToken = jtoken.SelectToken("artists").SelectToken("@attr");
pageresponse.AddPageInfoFromJToken(attrToken);
return pageresponse;
}
else
{
return LastResponse.CreateErrorResponse<PageResponse<LastArtist>>(error); return LastResponse.CreateErrorResponse<PageResponse<LastArtist>>(error);
}
var jtoken = JsonConvert.DeserializeObject<JToken>(json).SelectToken("artists");
return PageResponse<LastArtist>.CreatePageResponse(jtoken.SelectToken("artist"), jtoken.SelectToken("@attr"),
LastArtist.ParseJToken);
} }
} }
} }

View File

@ -34,8 +34,8 @@ public async override Task<PageResponse<LastTrack>> HandleResponse(HttpResponseM
if (!LastFm.IsResponseValid(json, out error) || !response.IsSuccessStatusCode) if (!LastFm.IsResponseValid(json, out error) || !response.IsSuccessStatusCode)
return LastResponse.CreateErrorResponse<PageResponse<LastTrack>>(error); return LastResponse.CreateErrorResponse<PageResponse<LastTrack>>(error);
var jtoken = JsonConvert.DeserializeObject<JToken>(json); var jtoken = JsonConvert.DeserializeObject<JToken>(json).SelectToken("tracks");
return PageResponse<LastTrack>.CreatePageResponse(jtoken.SelectToken("tracks").SelectToken("track"), jtoken.SelectToken("@attr"), LastTrack.ParseJToken); return PageResponse<LastTrack>.CreatePageResponse(jtoken.SelectToken("track"), jtoken.SelectToken("@attr"), LastTrack.ParseJToken);
} }
} }
} }

View File

@ -30,30 +30,15 @@ public override void SetParameters()
public async override Task<PageResponse<LastTrack>> HandleResponse(HttpResponseMessage response) public async override Task<PageResponse<LastTrack>> HandleResponse(HttpResponseMessage response)
{ {
string json = await response.Content.ReadAsStringAsync(); var json = await response.Content.ReadAsStringAsync();
LastFmApiError error; LastFmApiError error;
if (LastFm.IsResponseValid(json, out error) && response.IsSuccessStatusCode) if (!LastFm.IsResponseValid(json, out error) || !response.IsSuccessStatusCode)
{
var jtoken = JsonConvert.DeserializeObject<JToken>(json);
var tracks = jtoken.SelectToken("results")
.SelectToken("trackmatches")
.SelectToken("track")
.Children().Select(LastTrack.ParseJToken)
.ToList();
var pageresponse = PageResponse<LastTrack>.CreateSuccessResponse(tracks);
var attrToken = jtoken.SelectToken("results");
pageresponse.AddPageInfoFromOpenQueryJToken(attrToken);
return pageresponse;
}
else
{
return LastResponse.CreateErrorResponse<PageResponse<LastTrack>>(error); return LastResponse.CreateErrorResponse<PageResponse<LastTrack>>(error);
}
var jtoken = JsonConvert.DeserializeObject<JToken>(json).SelectToken("results");
return PageResponse<LastTrack>.CreatePageResponse(jtoken.SelectToken("trackmatches").SelectToken("track"),
jtoken, LastTrack.ParseJToken, true);
} }
} }
} }

View File

@ -121,10 +121,14 @@ public void AddPageInfoFromOpenQueryJToken(JToken queryToken)
TotalPages = (int)Math.Ceiling((double)TotalItems / PageSize); TotalPages = (int)Math.Ceiling((double)TotalItems / PageSize);
} }
public static PageResponse<T> CreatePageResponse(JToken itemsToken, JToken attrToken, Func<JToken, T> parseToken) public static PageResponse<T> CreatePageResponse(JToken itemsToken, JToken pageInfoToken, Func<JToken, T> parseToken, bool isOpenQueryToken = false)
{ {
var pageresponse = CreateSuccessResponse(); var pageresponse = CreateSuccessResponse();
pageresponse.AddPageInfoFromJToken(attrToken);
if (isOpenQueryToken)
pageresponse.AddPageInfoFromOpenQueryJToken(pageInfoToken);
else
pageresponse.AddPageInfoFromJToken(pageInfoToken);
var albums = new List<T>(); var albums = new List<T>();

View File

@ -10,6 +10,7 @@ public class LastAlbum : ILastFmObject
{ {
#region Properties #region Properties
public string Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
public IEnumerable<LastTrack> Tracks { get; set; } public IEnumerable<LastTrack> Tracks { get; set; }
@ -41,6 +42,7 @@ internal static LastAlbum ParseJToken(JToken token)
{ {
var a = new LastAlbum(); var a = new LastAlbum();
a.Id = token.Value<string>("id");
var artistToken = token["artist"]; var artistToken = token["artist"];
switch (artistToken.Type) switch (artistToken.Type)
{ {
@ -90,7 +92,7 @@ internal static LastAlbum ParseJToken(JToken token)
internal static string GetNameFromJToken(JToken albumToken) internal static string GetNameFromJToken(JToken albumToken)
{ {
var name = albumToken.Value<string>("name"); var name = albumToken.Value<string>("title");
if (string.IsNullOrEmpty(name)) if (string.IsNullOrEmpty(name))
{ {

View File

@ -12,6 +12,7 @@ public class LastArtist : ILastFmObject
{ {
#region Properties #region Properties
public string Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string Mbid { get; set; } public string Mbid { get; set; }
public Uri Url { get; set; } public Uri Url { get; set; }
@ -26,6 +27,7 @@ internal static LastArtist ParseJToken(JToken token)
{ {
var a = new LastArtist(); var a = new LastArtist();
a.Id = token.Value<string>("id");
a.Name = token.Value<string>("name"); a.Name = token.Value<string>("name");
a.Mbid = token.Value<string>("mbid"); a.Mbid = token.Value<string>("mbid");
var url = token.Value<string>("url"); var url = token.Value<string>("url");

View File

@ -13,6 +13,7 @@ public class LastTrack : ILastFmObject
{ {
#region Properties #region Properties
public string Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
public TimeSpan Duration { get; set; } public TimeSpan Duration { get; set; }
public string Mbid { get; set; } public string Mbid { get; set; }
@ -44,6 +45,7 @@ internal static LastTrack ParseJToken(JToken token)
{ {
var t = new LastTrack(); var t = new LastTrack();
t.Id = token.Value<string>("id");
t.Name = token.Value<string>("name"); t.Name = token.Value<string>("name");
t.Mbid = token.Value<string>("mbid"); t.Mbid = token.Value<string>("mbid");
t.Url = new Uri(token.Value<string>("url"), UriKind.Absolute); t.Url = new Uri(token.Value<string>("url"), UriKind.Absolute);