INFO_RET CMusicInfoScanner::UpdateDatabaseArtistInfo(CArtist& artist, const ADDON::ScraperPtr& scraper, bool bAllowSelection, CGUIDialogProgress* pDialog /* = NULL */) { if (!scraper) return INFO_ERROR; CMusicArtistInfo artistInfo; loop: CLog::Log(LOGDEBUG, "%s downloading info for: %s", __FUNCTION__, artist.strArtist.c_str()); INFO_RET artistDownloadStatus = DownloadArtistInfo(artist, scraper, artistInfo, pDialog); if (artistDownloadStatus == INFO_NOT_FOUND) { if (pDialog && bAllowSelection) { if (!CGUIKeyboardFactory::ShowAndGetInput(artist.strArtist, g_localizeStrings.Get(16025), false)) return INFO_CANCELLED; goto loop; } } else if (artistDownloadStatus == INFO_ADDED) { artist.MergeScrapedArtist(artistInfo.GetArtist(), CSettings::Get().GetBool("musiclibrary.overridetags")); m_musicDatabase.Open(); m_musicDatabase.UpdateArtist(artist); m_musicDatabase.GetArtistPath(artist.idArtist, artist.strPath); m_musicDatabase.SetArtForItem(artist.idArtist, MediaTypeArtist, GetArtistArtwork(artist)); m_musicDatabase.Close(); artistInfo.SetLoaded(); } return artistDownloadStatus; }
bool CGUIWindowMusicBase::FindArtistInfo(const CStdString& strArtist, CMusicArtistInfo& artist, const SScraperInfo& info, ALLOW_SELECTION allowSelection) { // quietly return if Internet lookups are disabled if (!g_guiSettings.GetBool("network.enableinternet")) return false; // show dialog box indicating we're searching the album if (m_dlgProgress && allowSelection != SELECTION_AUTO) { m_dlgProgress->SetHeading(21889); m_dlgProgress->SetLine(0, strArtist); m_dlgProgress->SetLine(1, ""); m_dlgProgress->SetLine(2, ""); m_dlgProgress->StartModal(); } CMusicInfoScanner scanner; CStdString strPath; long idArtist = m_musicdatabase.GetArtistByName(strArtist); strPath.Format("musicdb://2/%u/",idArtist); if (!scanner.DownloadArtistInfo(strPath,strArtist,m_dlgProgress)) { // no albums found CGUIDialogOK::ShowAndGetInput(21889, 0, 20198, 0); return false; } m_musicdatabase.GetArtistInfo(idArtist,artist.GetArtist()); artist.SetLoaded(true); return true; }
bool CGUIWindowMusicBase::FindArtistInfo(const CStdString& strArtist, CMusicArtistInfo& artist, ALLOW_SELECTION allowSelection) { // show dialog box indicating we're searching the album if (m_dlgProgress && allowSelection != SELECTION_AUTO) { m_dlgProgress->SetHeading(21889); m_dlgProgress->SetLine(0, strArtist); m_dlgProgress->SetLine(1, ""); m_dlgProgress->SetLine(2, ""); m_dlgProgress->StartModal(); } CMusicInfoScanner scanner; CStdString strPath; CStdString strTempArtist(strArtist); long idArtist = m_musicdatabase.GetArtistByName(strArtist); strPath.Format("musicdb://2/%u/",idArtist); bool bCanceled(false); bool needsRefresh(true); do { if (!scanner.DownloadArtistInfo(strPath,strTempArtist,bCanceled,m_dlgProgress)) { if (bCanceled) return false; if (m_dlgProgress && allowSelection != SELECTION_AUTO) { if (!CGUIKeyboardFactory::ShowAndGetInput(strTempArtist, g_localizeStrings.Get(16025), false)) return false; } else needsRefresh = false; } else needsRefresh = false; } while (needsRefresh || bCanceled); if (!m_musicdatabase.GetArtistInfo(idArtist,artist.GetArtist())) return false; artist.SetLoaded(); return true; }
INFO_RET CMusicInfoScanner::UpdateDatabaseArtistInfo(CArtist& artist, const ADDON::ScraperPtr& scraper, bool bAllowSelection, CGUIDialogProgress* pDialog /* = NULL */) { if (!scraper) return INFO_ERROR; CMusicArtistInfo artistInfo; loop: CLog::Log(LOGDEBUG, "%s downloading info for: %s", __FUNCTION__, artist.strArtist.c_str()); INFO_RET artistDownloadStatus = DownloadArtistInfo(artist, scraper, artistInfo, pDialog); if (artistDownloadStatus == INFO_NOT_FOUND) { if (pDialog && bAllowSelection) { if (!CGUIKeyboardFactory::ShowAndGetInput(artist.strArtist, CVariant{g_localizeStrings.Get(16025)}, false)) return INFO_CANCELLED; goto loop; } else { CEventLog::GetInstance().Add(EventPtr(new CMediaLibraryEvent( MediaTypeArtist, artist.strPath, 24146, StringUtils::Format(g_localizeStrings.Get(24147).c_str(), MediaTypeArtist, artist.strArtist.c_str()), CScraperUrl::GetThumbURL(artist.thumbURL.GetFirstThumb()), CURL::GetRedacted(artist.strPath), EventLevel::Warning))); } } else if (artistDownloadStatus == INFO_ADDED) { artist.MergeScrapedArtist(artistInfo.GetArtist(), CServiceBroker::GetSettings().GetBool(CSettings::SETTING_MUSICLIBRARY_OVERRIDETAGS)); m_musicDatabase.Open(); m_musicDatabase.UpdateArtist(artist); m_musicDatabase.GetArtistPath(artist.idArtist, artist.strPath); m_musicDatabase.SetArtForItem(artist.idArtist, MediaTypeArtist, GetArtistArtwork(artist)); m_musicDatabase.Close(); artistInfo.SetLoaded(); } return artistDownloadStatus; }