Example #1
0
        public async Task <Album> GetItemAsync(string id, string additionnalInfos = null)
        {
            try
            {
                if (lastAlbum != null && lastAlbum.ProviderId == id)
                {
                    return(await Task.FromResult(lastAlbum));
                }

                else if (id != null && id != "" && CrossConnectivity.Current.IsConnected)
                {
                    //If mbid
                    if (id.Length == 36 && id.Contains("-"))
                    {
//                            var album = await Release.GetAsync(id, "artist-rels", "url-rels", "event-rels",
//                                "release-rels");
                        var lastfmAlbum = await lastFm.Album.GetInfoByMbidAsync(id);

                        lastAlbum = new Album(lastfmAlbum.Content.Name,
                                              lastfmAlbum.Content.ReleaseDateUtc.ToString(), lastfmAlbum.Content.ArtistName,
                                              lastfmAlbum.Content.ArtistName,
                                              ConverterToViewObj.ConvertTracks(lastfmAlbum.Content.Tracks),
                                              ConverterToViewObj.ConvertTags(lastfmAlbum.Content.TopTags),
                                              lastfmAlbum.Content.Images.Large.AbsoluteUri,
                                              lastfmAlbum.Content.Mbid);
                    }
                    else
                    {
                        var lastfmAlbum = await lastFm.Album.GetInfoAsync(additionnalInfos, id);

                        lastAlbum = new Album(lastfmAlbum.Content.Name,
                                              lastfmAlbum.Content.ReleaseDateUtc.ToString(), lastfmAlbum.Content.ArtistName,
                                              lastfmAlbum.Content.ArtistName,
                                              ConverterToViewObj.ConvertTracks(lastfmAlbum.Content.Tracks),
                                              ConverterToViewObj.ConvertTags(lastfmAlbum.Content.TopTags),
                                              lastfmAlbum.Content.Images.Large.AbsoluteUri,
                                              lastfmAlbum.Content.Mbid);
                    }

                    return(await Task.FromResult(lastAlbum));
                }


                return(null);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return(null);
            }
        }
Example #2
0
        public async Task <Artiste> GetItemAsync(string id, string additionnalInfos = null)
        {
            Artiste tmpArtist = null;

            try
            {
                try
                {
                    if (lastArtist != null && lastArtist.ProviderId == id)
                    {
                        return(await Task.FromResult(lastArtist));
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }

                if (id != null && id != "" && CrossConnectivity.Current.IsConnected)
                {
                    HttpClient client = new HttpClient();
                    //If mbid
                    if (id.Length == 36 && id.Contains("-"))
                    {
                        // Build an advanced query to search for the release.
                        //                            var query = new QueryParameters<Release>();
                        //                            query.Add("arid", id );
                        //                            query.Add("type", "album");
                        //                            query.Add("status", "official");
                        // Search for a release by title.

                        // Parallelise request to data providers
                        var artistRequest = Artist.GetAsync(id, "artist-rels", "url-rels", "event-rels",
                                                            "release-rels");
//                        var releasesRequest = Release.BrowseAsync("artist", id, 9);
                        var lastfmArtisTopAlbumsRequest = lastFm.Artist.GetTopAlbumsAsync(additionnalInfos);
                        var lastfmArtistRequest         = lastFm.Artist.GetInfoByMbidAsync(id, "fr");
                        var lastfmArtistSimilarsRequest = lastFm.Artist.GetSimilarByMbidAsync(id, false, 10);
                        var songKickUpEventRequest      = client.GetAsync("https://api.songkick.com/api/3.0/artists/mbid:"
                                                                          + id + "/calendar.json?apikey=" +
                                                                          App.SONGKICK_API_KEY);
                        //                        await Task.WhenAll(artistRequest, releasesRequest, lastfmArtistRequest);
                        await Task.WhenAll(artistRequest, lastfmArtisTopAlbumsRequest, lastfmArtistRequest,
                                           lastfmArtistSimilarsRequest, songKickUpEventRequest);

                        var artist = await artistRequest;
//                        var releases = await releasesRequest;
                        var lastfmArtisTopAlbums = await lastfmArtisTopAlbumsRequest;
                        var lastfmArtis          = await lastfmArtistRequest;
                        var lastfmArtistSimilars = await lastfmArtistSimilarsRequest;
                        var songKickUpEvent      = await songKickUpEventRequest;

                        // Use tmpArtist until full artist data are ok
                        tmpArtist = new Artiste(lastfmArtis.Content.Name, lastfmArtis.Content.Name, "",
                                                artist.LifeSpan.Begin,
                                                ConverterToViewObj.GetAge(artist.LifeSpan.Begin), artist.Country, artist.Type, "",
                                                ConverterToViewObj.ConvertRelToMap(artist.Relations, id), artist.Disambiguation,
                                                new List <Artiste>(), null,
                                                new List <Event>(), lastfmArtis.Content.Bio.Summary,
                                                lastfmArtis.Content.MainImage.Large.AbsoluteUri, id);

                        IListHelper.AddRange(tmpArtist.Projects,
                                             ConverterToViewObj.ConvertAlbums(lastfmArtisTopAlbums.Content));
                        IListHelper.AddRange(tmpArtist.Similars,
                                             ConverterToViewObj.ConvertArtistes(lastfmArtistSimilars.Content));

                        var songKickUpEvt = await songKickUpEvent.Content.ReadAsStringAsync();

                        IListHelper.AddRange(tmpArtist.UpEvents, ConverterToViewObj.ConvertSkEvents(songKickUpEvt));

                        // If no album loaded with last.fm, try with Musicbrainz
                        if (tmpArtist.Projects?.Count == 0)
                        {
//                             Load releases and releases img from MB parallele
                            var releases = await Release.BrowseAsync("artist", id, 9);

                            List <Task <Release> >             requestRelease  = new List <Task <Release> >();
                            List <Task <HttpResponseMessage> > releaseImageUrl = new List <Task <HttpResponseMessage> >();
                            foreach (var release in releases.Items)
                            {
                                requestRelease.Add(Release.GetAsync(release.Id, "recordings", "artist-credits",
                                                                    "url-rels"));
                                var image_uri = new Uri("http://coverartarchive.org/release/" + release.Id);
                                releaseImageUrl.Add(client.GetAsync(image_uri));
                            }

                            var loadedReleases = await Task.WhenAll(requestRelease);

                            var releaseImages = await Task.WhenAll(releaseImageUrl);

                            List <Task <string> > imgContents = new List <Task <string> >();
                            foreach (var relImg in releaseImages)
                            {
                                var content = relImg.Content.ReadAsStringAsync();
                                imgContents.Add(content);
                            }

                            var imgs = await Task.WhenAll(imgContents);

                            // Try to parse json img response
                            List <string> urlList = new List <string>();
                            foreach (var img in imgs)
                            {
                                string url = null;
                                try
                                {
                                    dynamic json = JsonConvert.DeserializeObject(img);
                                    url = json.images[0].image;
                                }
                                catch (Exception e)
                                {
                                    Console.WriteLine(e.Message);
                                }

                                urlList.Add(url);
                            }

                            IListHelper.AddRange(tmpArtist.Projects,
                                                 ConverterToViewObj.ConvertMbAlbums(loadedReleases, urlList));
                        }

                        lastArtist = tmpArtist;

                        return(await Task.FromResult(tmpArtist));
                    }
                    else
                    {
                        //TODO: test paralelle async call
                        var syncArtist   = lastFm.Artist.GetInfoAsync(id, "fr");
                        var syncAlbums   = lastFm.Artist.GetTopAlbumsAsync(id);
                        var syncSimilars = lastFm.Artist.GetTopAlbumsAsync(id, false, 1, 10);
                        await Task.WhenAll(syncArtist, syncAlbums, syncSimilars);

                        var lastfmArtis          = await syncArtist;
                        var lastfmArtisTopAlbums = await syncAlbums;
                        var lastfmArtisSimilars  = await syncSimilars;

                        tmpArtist = new Artiste(lastfmArtis.Content.Name, lastfmArtis.Content.Name, "", "",
                                                0, "", "", "", new List <MyKeyValuePair>(), "",
                                                new List <Artiste>(),
                                                ConverterToViewObj.ConvertAlbums(lastfmArtisTopAlbums.Content),
                                                new List <Event>(), lastfmArtis.Content.Bio.Summary,
                                                lastfmArtis.Content.MainImage.Large.AbsoluteUri, id);
                        lastArtist = tmpArtist;

                        return(await Task.FromResult(tmpArtist));
                    }
                }

                return(await Task.FromResult(lastArtist));
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return(await Task.FromResult(tmpArtist));
            }
        }