Ejemplo n.º 1
0
        public async Task HandleSuccessResponse()
        {
            var expectedAlbum = new LastAlbum
            {
                ArtistName = "Madonna",
                ListenerCount = 509271,
                PlayCount = 7341494,
                Mbid = "ddb3168d-66a9-4b2d-af02-05278da8a23d",
                Url = new Uri("http://www.last.fm/music/Madonna/Ray+of+Light", UriKind.Absolute),
                Name = "Ray of Light",
                ReleaseDateUtc = new DateTime(2005, 09, 13, 0, 0, 0),
                Id = "1934",
                Images = new LastImageSet(
                    "http://userserve-ak.last.fm/serve/34s/37498173.png",
                    "http://userserve-ak.last.fm/serve/64s/37498173.png",
                    "http://userserve-ak.last.fm/serve/174s/37498173.png",
                    "http://userserve-ak.last.fm/serve/300x300/37498173.png",
                    "http://userserve-ak.last.fm/serve/_/37498173/Ray+of+Light.png"),
                TopTags = new List<LastTag>
                {
                    new LastTag("albums i own", "http://www.last.fm/tag/albums%20i%20own"),
                    new LastTag("pop", "http://www.last.fm/tag/pop"),
                    new LastTag("electronic", "http://www.last.fm/tag/electronic"),
                    new LastTag("dance", "http://www.last.fm/tag/dance"),
                    new LastTag("madonna", "http://www.last.fm/tag/madonna")
                }
            };

            var response = CreateResponseMessage(Encoding.UTF8.GetString(AlbumApiResponses.AlbumGetInfoSuccess));
            var parsed = await _command.HandleResponse(response);

            Assert.IsTrue(parsed.Success);

            var actual = parsed.Content;
            Assert.IsTrue(actual.Tracks.Count() == 13);
            actual.Tracks = null;

            var expectedJson = JsonConvert.SerializeObject(expectedAlbum, Formatting.Indented);
            var actualJson = JsonConvert.SerializeObject(parsed.Content, Formatting.Indented);

            Assert.AreEqual(expectedJson, actualJson, expectedJson.DifferencesTo(actualJson));
        }
Ejemplo n.º 2
0
        private async void LoadData(LastAlbum album)
        {
            IsLoading = true;

            try
            {
                Album = await _service.GetDetailAlbum(album.Name, album.ArtistName);

                if (Album == null)
                {
                    CurtainPrompt.ShowError("AppNetworkIssue".FromLanguageResource());
                    return;
                }

                if (Album.Tracks == null && Album.Name.Contains("Deluxe Edition"))
                {
                    Album = await _service.GetDetailAlbum(album.Name.Replace("(Deluxe Edition)", ""), album.ArtistName);

                    if (Album == null)
                    {
                        CurtainPrompt.ShowError("AppNetworkIssue".FromLanguageResource());
                        return;
                    }
                }

                if (Album.Tracks != null)
                    Tracks = new ObservableCollection<LastTrack>(Album.Tracks);
                else
                    CurtainPrompt.ShowError("AlbumNoTracks".FromLanguageResource());
            }
            catch (Exception e)
            {
                CurtainPrompt.ShowError("AppNetworkIssue".FromLanguageResource());
            }
            IsLoading = false;
        }
        public async Task HandleResponseSingle()
        {
            var expectedAlbum = new LastAlbum
            {
                ArtistName = "Crystal Castles",
                Name = "Crystal Castles",
                PlayCount = 2206,
                Mbid = "a432a420-f374-4556-8421-b4ea097c7fe9",
                Url = new Uri("http://www.last.fm/music/Crystal+Castles/Crystal+Castles"),
                ListenerCount = null,
                Images = new LastImageSet(
                    "http://userserve-ak.last.fm/serve/34s/78606386.png",
                    "http://userserve-ak.last.fm/serve/64s/78606386.png",
                    "http://userserve-ak.last.fm/serve/126/78606386.png",
                    "http://userserve-ak.last.fm/serve/300x300/78606386.png"),
                Tracks = Enumerable.Empty<LastTrack>(),
                ReleaseDateUtc = null,
                TopTags = Enumerable.Empty<LastTag>()
            };

            var http = CreateResponseMessage(Encoding.UTF8.GetString(UserApiResponses.UserGetTopAlbumsSingle));
            var response = await _command.HandleResponse(http);
            
            Assert.IsTrue(response.Success);
            Assert.AreEqual(1, response.Content.Count);

            var actualAlbum = response.Content.First();
            
            TestHelper.AssertSerialiseEqual(expectedAlbum, actualAlbum);
        }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="fetchedRelease">The fetched release.</param>
 public FetchedReleaseViewModel(LastAlbum fetchedRelease)
 {
   FetchedRelease = fetchedRelease;
 }
Ejemplo n.º 5
0
        internal static LastAlbum ParseJToken(JToken token)
        {
            var a = new LastAlbum();

            a.Id = token.Value<string>("id");
            var artistToken = token["artist"];
            switch (artistToken.Type)
            {
                case JTokenType.String:
                    a.ArtistName = token.Value<string>("artist");
                    break;
                case JTokenType.Object:
                    a.ArtistName = artistToken.Value<string>("name");
                    break;
            }

            var tracksToken = token.SelectToken("tracks");
            if (tracksToken != null)
            {
                var trackToken = tracksToken.SelectToken("track");
                if (trackToken != null)
                    a.Tracks = trackToken.Type == JTokenType.Array
                        ? trackToken.Children().Select(t => LastTrack.ParseJToken(t, a.Name))
                        : new List<LastTrack>() {LastTrack.ParseJToken(trackToken, a.Name)};
            }
            else
            {
                a.Tracks = Enumerable.Empty<LastTrack>();
            }

            var tagsToken = token.SelectToken("toptags");
            if (tagsToken != null)
            {
                var tagToken = tagsToken.SelectToken("tag");
                if (tagToken != null)
                {
                    a.TopTags = 
                        tagToken.Type == JTokenType.Array 
                        ? tagToken.Children().Select(token1 => LastTag.ParseJToken(token1)) 
                        : new List<LastTag> { LastTag.ParseJToken(tagToken) };
                }
            }
            else
            {
                a.TopTags = Enumerable.Empty<LastTag>();
            }
    
            a.ListenerCount = token.Value<int?>("listeners");
            a.Mbid = token.Value<string>("mbid");
            a.Name = token.Value<string>("name");

            var playCountStr = token.Value<string>("playcount");
            int playCount;
            if (int.TryParse(playCountStr, out playCount))
            {
                a.PlayCount = playCount;
            }

            var images = token.SelectToken("image");
            if (images != null)
            {
                var imageCollection = LastImageSet.ParseJToken(images);
                a.Images = imageCollection;
            }
            
            a.Url = new Uri(token.Value<string>("url"), UriKind.Absolute);

            var dateString = token.Value<string>("releasedate");
            DateTimeOffset releaseDate;
            if (DateTimeOffset.TryParse(dateString, out releaseDate))
            {
                a.ReleaseDateUtc = releaseDate;
            }

            return a;
        }