bool CGUIWindowMusicBase::ShowAlbumInfo(const CFileItem *pItem, bool bShowInfo /* = true */) { CQueryParams params; CDirectoryNode::GetDatabaseInfo(pItem->GetPath(), params); ADDON::ScraperPtr scraper; if (!m_musicdatabase.GetScraperForPath(pItem->GetPath(), scraper, ADDON::ADDON_SCRAPER_ALBUMS)) return false; CAlbum album; if (!m_musicdatabase.GetAlbum(params.GetAlbumId(), album)) return false; album.bScrapedMBID = m_musicdatabase.HasScrapedAlbumMBID(album.idAlbum); m_musicdatabase.GetAlbumPath(params.GetAlbumId(), album.strPath); bool refresh = false; while (1) { // Check if the entry should be refreshed (Only happens if a user pressed refresh) if (refresh) { if (!CProfilesManager::GetInstance().GetCurrentProfile().canWriteDatabases() && !g_passwordManager.bMasterUser) { //! @todo should display a dialog saying no permissions if (m_dlgProgress) m_dlgProgress->Close(); return false; } if (g_application.IsMusicScanning()) { CGUIDialogOK::ShowAndGetInput(CVariant{189}, CVariant{14057}); if (m_dlgProgress) m_dlgProgress->Close(); return false; } // show dialog box indicating we're searching the album if (m_dlgProgress && bShowInfo) { m_dlgProgress->SetHeading(CVariant{185}); m_dlgProgress->SetLine(0, CVariant{pItem->GetMusicInfoTag()->GetAlbum()}); m_dlgProgress->SetLine(1, CVariant{pItem->GetMusicInfoTag()->GetAlbumArtistString()}); m_dlgProgress->SetLine(2, CVariant{""}); m_dlgProgress->Open(); } CMusicInfoScanner scanner; if (scanner.UpdateDatabaseAlbumInfo(album, scraper, bShowInfo, m_dlgProgress) != INFO_ADDED) { CGUIDialogOK::ShowAndGetInput(CVariant{185}, CVariant{500}); if (m_dlgProgress) m_dlgProgress->Close(); return false; } } if (m_dlgProgress) m_dlgProgress->Close(); CGUIDialogMusicInfo *pDlgAlbumInfo = g_windowManager.GetWindow<CGUIDialogMusicInfo>(WINDOW_DIALOG_MUSIC_INFO); if (pDlgAlbumInfo) { pDlgAlbumInfo->SetAlbum(album, album.strPath); pDlgAlbumInfo->Open(); if (pDlgAlbumInfo->NeedRefresh()) { m_musicdatabase.ClearAlbumLastScrapedTime(params.GetAlbumId()); refresh = true; continue; } else if (pDlgAlbumInfo->HasUpdatedThumb()) UpdateThumb(album, album.strPath); else if (pDlgAlbumInfo->NeedsUpdate()) Refresh(true); // update our file list } break; } if (m_dlgProgress) m_dlgProgress->Close(); return true; }
bool CGUIWindowMusicBase::ShowAlbumInfo(const CFileItem *pItem, bool bShowInfo /* = true */) { CQueryParams params; CDirectoryNode::GetDatabaseInfo(pItem->GetPath(), params); ADDON::ScraperPtr scraper; if (!m_musicdatabase.GetScraperForPath(pItem->GetPath(), scraper, ADDON::ADDON_SCRAPER_ALBUMS)) return false; CAlbum album; if (!m_musicdatabase.GetAlbum(params.GetAlbumId(), album)) return false; m_musicdatabase.GetAlbumPath(params.GetAlbumId(), album.strPath); while (1) { if (!m_musicdatabase.HasAlbumBeenScraped(params.GetAlbumId())) { if (!CProfilesManager::GetInstance().GetCurrentProfile().canWriteDatabases() && !g_passwordManager.bMasterUser) { // TODO: should display a dialog saying no permissions if (m_dlgProgress) m_dlgProgress->Close(); return false; } if (g_application.IsMusicScanning()) { CGUIDialogOK::ShowAndGetInput(CVariant{189}, CVariant{14057}); if (m_dlgProgress) m_dlgProgress->Close(); return false; } // show dialog box indicating we're searching the album if (m_dlgProgress && bShowInfo) { m_dlgProgress->SetHeading(CVariant{185}); m_dlgProgress->SetLine(0, CVariant{pItem->GetMusicInfoTag()->GetAlbum()}); m_dlgProgress->SetLine(1, CVariant{StringUtils::Join(pItem->GetMusicInfoTag()->GetAlbumArtist(), g_advancedSettings.m_musicItemSeparator)}); m_dlgProgress->SetLine(2, CVariant{""}); m_dlgProgress->Open(); } CMusicInfoScanner scanner; if (scanner.UpdateDatabaseAlbumInfo(album, scraper, bShowInfo, m_dlgProgress) != INFO_ADDED) { CGUIDialogOK::ShowAndGetInput(CVariant{185}, CVariant{500}); if (m_dlgProgress) m_dlgProgress->Close(); return false; } } if (m_dlgProgress) m_dlgProgress->Close(); CGUIDialogMusicInfo *pDlgAlbumInfo = (CGUIDialogMusicInfo*)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_INFO); if (pDlgAlbumInfo) { pDlgAlbumInfo->SetAlbum(album, album.strPath); pDlgAlbumInfo->Open(); if (pDlgAlbumInfo->NeedRefresh()) { m_musicdatabase.ClearAlbumLastScrapedTime(params.GetAlbumId()); continue; } else if (pDlgAlbumInfo->HasUpdatedThumb()) { UpdateThumb(album, album.strPath); } } break; } if (m_dlgProgress) m_dlgProgress->Close(); return true; }
bool CGUIWindowMusicBase::ShowAlbumInfo(const CFileItem *pItem, bool bShowInfo /* = true */) { CQueryParams params; CDirectoryNode::GetDatabaseInfo(pItem->GetPath(), params); CMusicAlbumInfo albumInfo; while (1) { if (!m_musicdatabase.HasAlbumInfo(params.GetAlbumId()) || !m_musicdatabase.GetAlbumInfo(params.GetAlbumId(), albumInfo.GetAlbum(), &albumInfo.GetAlbum().songs)) { if (!CProfilesManager::Get().GetCurrentProfile().canWriteDatabases() && !g_passwordManager.bMasterUser) { // TODO: should display a dialog saying no permissions if (m_dlgProgress) m_dlgProgress->Close(); return false; } if (g_application.IsMusicScanning()) { CGUIDialogOK::ShowAndGetInput(189, 14057, 0, 0); if (m_dlgProgress) m_dlgProgress->Close(); return false; } // show dialog box indicating we're searching the album if (m_dlgProgress && bShowInfo) { m_dlgProgress->SetHeading(185); m_dlgProgress->SetLine(0, pItem->GetMusicInfoTag()->GetAlbum()); m_dlgProgress->SetLine(1, StringUtils::Join(pItem->GetMusicInfoTag()->GetAlbumArtist(), g_advancedSettings.m_musicItemSeparator)); m_dlgProgress->SetLine(2, ""); m_dlgProgress->StartModal(); } CMusicInfoScanner scanner; if (scanner.UpdateDatabaseAlbumInfo(pItem->GetPath(), albumInfo, bShowInfo) != INFO_ADDED || !albumInfo.Loaded()) { CGUIDialogOK::ShowAndGetInput(185, 0, 500, 0); if (m_dlgProgress) m_dlgProgress->Close(); return false; } } if (m_dlgProgress) m_dlgProgress->Close(); CGUIDialogMusicInfo *pDlgAlbumInfo = (CGUIDialogMusicInfo*)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_INFO); if (pDlgAlbumInfo) { CStdString strPath; m_musicdatabase.GetAlbumPath(params.GetAlbumId(), strPath); pDlgAlbumInfo->SetAlbum(albumInfo.GetAlbum(), strPath); pDlgAlbumInfo->DoModal(); if (pDlgAlbumInfo->NeedRefresh()) { m_musicdatabase.DeleteAlbumInfo(params.GetAlbumId()); continue; } else if (pDlgAlbumInfo->HasUpdatedThumb()) { UpdateThumb(albumInfo.GetAlbum(), strPath); } } break; } if (m_dlgProgress) m_dlgProgress->Close(); return true; }