protected virtual void ShowArtistInfo(string artistName, string albumName) { Log.Debug("Looking up Artist: {0}", albumName); var dlgProgress = (GUIDialogProgress)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_PROGRESS); var pDlgOK = (GUIDialogOK)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_OK); var errorEncountered = true; var artist = new ArtistInfo(); var artistInfo = new MusicArtistInfo(); if (m_database.GetArtistInfo(artistName, ref artist)) { // we already have artist info in database so just use that artistInfo.Set(artist); errorEncountered = false; } else { // lookup artist details if (null != pDlgOK && !Win32API.IsConnectedToInternet()) { pDlgOK.SetHeading(703); pDlgOK.SetLine(1, 703); pDlgOK.SetLine(2, string.Empty); pDlgOK.DoModal(GetID); return; } // show dialog box indicating we're searching the artist if (dlgProgress != null) { dlgProgress.Reset(); dlgProgress.SetHeading(320); dlgProgress.SetLine(1, artistName); dlgProgress.SetLine(2, string.Empty); dlgProgress.SetPercentage(0); dlgProgress.StartModal(GetID); dlgProgress.Progress(); dlgProgress.ShowProgressBar(true); } var scraper = new AllmusicSiteScraper(); List<AllMusicArtistMatch> artists; if(scraper.GetArtists(artistName, out artists)) { var selectedMatch = new AllMusicArtistMatch(); if (artists.Count == 1) { // only have single match so no need to ask user Log.Debug("Single Artist Match Found"); selectedMatch = artists[0]; errorEncountered = false; } else { // need to get user to choose which one to use Log.Debug("Muliple Artist Match Found ({0}) prompting user", artists.Count); var pDlg = (GUIDialogSelect2) GUIWindowManager.GetWindow((int) Window.WINDOW_DIALOG_SELECT2); if (null != pDlg) { pDlg.Reset(); pDlg.SetHeading(GUILocalizeStrings.Get(1303)); foreach (var i in artists.Select(artistMatch => new GUIListItem { Label = artistMatch.Artist + " - " + artistMatch.Genre, Label2 = artistMatch.YearsActive, Path = artistMatch.ArtistUrl, IconImage = artistMatch.ImageUrl })) { pDlg.Add(i); } pDlg.DoModal(GetID); // and wait till user selects one var iSelectedMatch = pDlg.SelectedLabel; if (iSelectedMatch < 0) { return; } selectedMatch = artists[iSelectedMatch]; } if (null != dlgProgress) { dlgProgress.Reset(); dlgProgress.SetHeading(320); dlgProgress.SetLine(1, artistName); dlgProgress.SetLine(2, string.Empty); dlgProgress.SetPercentage(40); dlgProgress.StartModal(GetID); dlgProgress.ShowProgressBar(true); dlgProgress.Progress(); } } string strHtml; if (scraper.GetArtistHtml(selectedMatch, out strHtml)) { if (null != dlgProgress) { dlgProgress.SetPercentage(60); dlgProgress.Progress(); } if (artistInfo.Parse(strHtml)) { if (null != dlgProgress) { dlgProgress.SetPercentage(80); dlgProgress.Progress(); } m_database.AddArtistInfo(artistInfo.Get()); errorEncountered = false; } } } } if (null != dlgProgress) { dlgProgress.SetPercentage(100); dlgProgress.Progress(); dlgProgress.Close(); dlgProgress = null; } if (!errorEncountered) { var pDlgArtistInfo = (GUIMusicArtistInfo)GUIWindowManager.GetWindow((int)Window.WINDOW_ARTIST_INFO); if (null != pDlgArtistInfo) { pDlgArtistInfo.Artist = artistInfo; pDlgArtistInfo.DoModal(GetID); if (pDlgArtistInfo.NeedsRefresh) { m_database.DeleteArtistInfo(artistInfo.Artist); ShowArtistInfo(artistName, albumName); } } } else { Log.Debug("Unable to get artist details"); if (null != pDlgOK) { pDlgOK.SetHeading(702); pDlgOK.SetLine(1, 702); pDlgOK.SetLine(2, string.Empty); pDlgOK.DoModal(GetID); } } }
protected virtual void ShowArtistInfo(string artistName, string albumName) { GUIDialogOK pDlgOK = (GUIDialogOK)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_OK); GUIDialogProgress dlgProgress = (GUIDialogProgress)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_PROGRESS); bool bSaveDb = true; bool bDisplayErr = false; ArtistInfo artist = new ArtistInfo(); MusicArtistInfo artistInfo = new MusicArtistInfo(); if (m_database.GetArtistInfo(artistName, ref artist)) { artistInfo.Set(artist); } else { if (null != pDlgOK && !Win32API.IsConnectedToInternet()) { pDlgOK.SetHeading(703); pDlgOK.SetLine(1, 703); pDlgOK.SetLine(2, string.Empty); pDlgOK.DoModal(GetID); return; } // show dialog box indicating we're searching the artist if (dlgProgress != null) { dlgProgress.Reset(); dlgProgress.SetHeading(320); dlgProgress.SetLine(1, artistName); dlgProgress.SetLine(2, string.Empty); dlgProgress.SetPercentage(0); dlgProgress.StartModal(GetID); dlgProgress.Progress(); dlgProgress.ShowProgressBar(true); } // find artist info AllmusicSiteScraper scraper = new AllmusicSiteScraper(); if (scraper.FindInfo(AllmusicSiteScraper.SearchBy.Artists, artistName)) { // did we find at least 1 artist? if (scraper.IsMultiple()) { // let user choose one int iSelectedArtist = 0; string szText = GUILocalizeStrings.Get(181); GUIDialogSelect pDlg = (GUIDialogSelect)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_SELECT); if (null != pDlg) { pDlg.Reset(); pDlg.SetHeading(szText); foreach (string selectedArtist in scraper.GetItemsFound()) { pDlg.Add(selectedArtist); } pDlg.DoModal(GetID); // and wait till user selects one iSelectedArtist = pDlg.SelectedLabel; if (iSelectedArtist < 0) { return; } } // ok, now show dialog we're downloading the artist info if (null != dlgProgress) { dlgProgress.Reset(); dlgProgress.SetHeading(320); dlgProgress.SetLine(1, artistName); dlgProgress.SetLine(2, string.Empty); dlgProgress.SetPercentage(40); dlgProgress.StartModal(GetID); dlgProgress.ShowProgressBar(true); dlgProgress.Progress(); } // download the artist info if (!scraper.FindInfoByIndex(iSelectedArtist)) { if (null != dlgProgress) { dlgProgress.Close(); } return; } } if (null != dlgProgress) { dlgProgress.SetPercentage(60); dlgProgress.Progress(); } // Now we have either a Single hit or a selected Artist // Parse it if (artistInfo.Parse(scraper.GetHtmlContent())) { // if the artist selected from allmusic.com does not match // the one from the file, override the one from the allmusic // with the one from the file so the info is correct in the // database... if (!artistInfo.Artist.Equals(artistName)) { artistInfo.Artist = artistName; } if (bSaveDb) { // save to database m_database.AddArtistInfo(artistInfo.Get()); } if (null != dlgProgress) { dlgProgress.SetPercentage(100); dlgProgress.Progress(); dlgProgress.Close(); dlgProgress = null; } } else { bDisplayErr = true; } } else { bDisplayErr = true; } } if (null != dlgProgress) { dlgProgress.Close(); } if (!bDisplayErr) { // ok, show Artist info GUIMusicArtistInfo pDlgArtistInfo = (GUIMusicArtistInfo)GUIWindowManager.GetWindow((int)Window.WINDOW_ARTIST_INFO); if (null != pDlgArtistInfo) { pDlgArtistInfo.Artist = artistInfo; pDlgArtistInfo.DoModal(GetID); if (pDlgArtistInfo.NeedsRefresh) { m_database.DeleteArtistInfo(artistInfo.Artist); ShowArtistInfo(artistName, albumName); return; } } } else { if (null != dlgProgress) { dlgProgress.Close(); } if (null != pDlgOK) { pDlgOK.SetHeading(702); pDlgOK.SetLine(1, 702); pDlgOK.SetLine(2, string.Empty); pDlgOK.DoModal(GetID); } } }