示例#1
0
        // GET api/artist/5
        public async Task <IActionResult> Get(string id)
        {
            if (Guid.TryParse(id, out Guid guidOutput))
            {
                List <Task <Album> > AsyncCoverArtCalls = new List <Task <Album> >(); // En lista med asyncrona anrop som hämtar skivomslag
                Task <string>        callWikiDataForWikiPediaTitle;                   // Deklarerar ett asyncront anrop som ger Wikipedia-title.

                try
                {
                    // Ropar på MusicBrainz och inväntar svaret.
                    _MusicBrainzModel = await _MusicBrainz.GetModel(id);

                    _Artist.MbId = id;
                    _Artist.Name = _MusicBrainzModel.Name;
                }
                catch (Exception exception)
                {
                    return(StatusCode(int.Parse(exception.Message), "The following error occurred at MusicBrainz: "
                                      + int.Parse(exception.Message)));
                }

                foreach (var album in _MusicBrainzModel.Albums)
                {
                    //Påbörjar skapandet av album samt de asyncrona anropen efter skivomslag
                    Task <Album> getCompleteAlbum = _Artist.CreateCompleteAlbum(album.Id, album.Title, _CoverArt.GetUrl(album.Id));
                    AsyncCoverArtCalls.Add(getCompleteAlbum);
                }

                try
                {
                    //Ropar på WikiData
                    callWikiDataForWikiPediaTitle = _WikiData.GetWikiPediaTitle(_MusicBrainzModel.GetWikiDataQNumber());
                }
                catch (Exception exception)
                {
                    return(StatusCode(int.Parse(exception.Message), "The following error occurred at Wikidata: "
                                      + int.Parse(exception.Message)));
                }

                try
                {
                    foreach (var album in AsyncCoverArtCalls)
                    {
                        //Inväntar att omslaget kommit, lägger sedan in albumobjektet i artistens lista över album.
                        _Artist.Albums.Add(await album);
                    }
                }
                catch (Exception exception)
                {
                    return(StatusCode(int.Parse(exception.Message), "The following error occurred at CoverArtArchive: "
                                      + int.Parse(exception.Message)));
                }

                try
                {
                    /*Tar fram WikiPediaTitle antingen genom befintlig data eller
                     * från WikiDatas API och med WikiPediaTitle hämtas artistens
                     * description från WikiPedias API.*/
                    string wikiPediaTitle;
                    if (_MusicBrainzModel.GetWikiPediaTitle() != null)
                    {
                        wikiPediaTitle = _MusicBrainzModel.GetWikiPediaTitle();
                    }
                    else
                    {
                        wikiPediaTitle = await callWikiDataForWikiPediaTitle;
                    }

                    _Artist.Description = await _WikiPedia.GetArtistInfo(wikiPediaTitle);
                }
                catch (Exception exception)
                {
                    return(StatusCode(int.Parse(exception.Message), "The following error occurred at Wikipedia: "
                                      + int.Parse(exception.Message)));
                }

                return(Ok(_Artist));
            }
            else
            {
                return(BadRequest("You need to enter a Guid from https://musicbrainz.org/."));
            }
        }