void CGUIDialogPVRChannelManager::SaveList(void) { if (!m_bContainsChanges) return; /* display the progress dialog */ CGUIDialogProgress* pDlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); pDlgProgress->SetHeading(190); pDlgProgress->SetLine(0, ""); pDlgProgress->SetLine(1, 328); pDlgProgress->SetLine(2, ""); pDlgProgress->StartModal(); pDlgProgress->Progress(); pDlgProgress->SetPercentage(0); /* persist all channels */ unsigned int iNextChannelNumber(0); CPVRChannelGroupPtr group = g_PVRChannelGroups->GetGroupAll(m_bIsRadio); if (!group) return; for (int iListPtr = 0; iListPtr < m_channelItems->Size(); iListPtr++) { CFileItemPtr pItem = m_channelItems->Get(iListPtr); PersistChannel(pItem, group, &iNextChannelNumber); pDlgProgress->SetPercentage(iListPtr * 100 / m_channelItems->Size()); } group->SortAndRenumber(); group->Persist(); m_bContainsChanges = false; SetItemsUnchanged(); pDlgProgress->Close(); }
bool CAsyncFileCopy::Copy(const CStdString &from, const CStdString &to, const CStdString &heading) { // reset the variables to their appropriate states m_from = from; m_to = to; m_cancelled = false; m_succeeded = false; m_percent = 0; m_speed = 0; m_running = true; CStdString fromStripped, toStripped; CURL url1(from); url1.GetURLWithoutUserDetails(fromStripped); CURL url2(to); url2.GetURLWithoutUserDetails(toStripped); // create our thread, which starts the file copy operation Create(); CGUIDialogProgress *dlg = (CGUIDialogProgress *)m_gWindowManager.GetWindow(WINDOW_DIALOG_PROGRESS); DWORD time = timeGetTime(); while (m_running) { m_event.WaitMSec(1000 / 30); if (!m_running) break; // start the dialog up as needed if (dlg && !dlg->IsDialogRunning() && timeGetTime() > time + 500) // wait 0.5 seconds before starting dialog { dlg->SetHeading(heading); dlg->SetLine(0, fromStripped); dlg->SetLine(1, toStripped); dlg->SetPercentage(0); dlg->StartModal(); } // and update the dialog as we go if (dlg && dlg->IsDialogRunning()) { CStdString speedString; speedString.Format("%2.2f KB/s", m_speed / 1024); dlg->SetHeading(heading); dlg->SetLine(0, fromStripped); dlg->SetLine(1, toStripped); dlg->SetLine(2, speedString); dlg->SetPercentage(m_percent); dlg->Progress(); m_cancelled = dlg->IsCanceled(); } } if (dlg) dlg->Close(); return !m_cancelled && m_succeeded; }
bool CAddonInstaller::PromptForInstall(const std::string &addonID, AddonPtr &addon) { if (!g_passwordManager.CheckMenuLock(WINDOW_ADDON_BROWSER)) return false; // we assume that addons that are enabled don't get to this routine (i.e. that GetAddon() has been called) if (CAddonMgr::Get().GetAddon(addonID, addon, ADDON_UNKNOWN, false)) return false; // addon is installed but disabled, and the user has specifically activated something that needs // the addon - should we enable it? // check we have it available CAddonDatabase database; database.Open(); if (database.GetAddon(addonID, addon)) { // yes - ask user if they want it installed if (!CGUIDialogYesNo::ShowAndGetInput(g_localizeStrings.Get(24076), g_localizeStrings.Get(24100), addon->Name().c_str(), g_localizeStrings.Get(24101))) return false; if (Install(addonID, true)) { CGUIDialogProgress *progress = (CGUIDialogProgress *)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); if (progress) { progress->SetHeading(13413); // Downloading progress->SetLine(0, ""); progress->SetLine(1, addon->Name()); progress->SetLine(2, ""); progress->SetPercentage(0); progress->StartModal(); while (true) { progress->Progress(); unsigned int percent; if (progress->IsCanceled()) { Cancel(addonID); break; } if (!GetProgress(addonID, percent)) break; progress->SetPercentage(percent); } progress->Close(); } return CAddonMgr::Get().GetAddon(addonID, addon); } } return false; }
void DialogProgress::update(int percent, const String& line1, const String& line2, const String& line3) { DelayedCallGuard dcguard(languageHook); CGUIDialogProgress* pDialog = dlg; if (pDialog == NULL) throw WindowException("Dialog not created."); if (percent >= 0 && percent <= 100) { pDialog->SetPercentage(percent); pDialog->ShowProgressBar(true); } else { pDialog->ShowProgressBar(false); } if (!line1.empty()) pDialog->SetLine(0, CVariant{line1}); if (!line2.empty()) pDialog->SetLine(1, CVariant{line2}); if (!line3.empty()) pDialog->SetLine(2, CVariant{line3}); }
/*! \brief Progress callback from rar manager. \return true to continue processing, false to cancel. */ bool progress(int progress, const char *text) { bool cont(true); if ((shown || showTime.IsTimePast()) && g_application.IsCurrentThread()) { // grab the busy and show it CGUIDialogProgress* dlg = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); if (dlg) { if (!shown) { dlg->SetHeading(CVariant{heading}); dlg->Open(); } if (progress >= 0) { dlg->ShowProgressBar(true); dlg->SetPercentage(progress); } if (text) dlg->SetLine(1, CVariant{text}); cont = !dlg->IsCanceled(); shown = true; // tell render loop to spin dlg->Progress(); } } return cont; };
bool CAsyncFileCopy::Copy(const std::string &from, const std::string &to, const std::string &heading) { // reset the variables to their appropriate states m_from = from; m_to = to; m_cancelled = false; m_succeeded = false; m_percent = 0; m_speed = 0; m_running = true; CURL url1(from); CURL url2(to); // create our thread, which starts the file copy operation Create(); CGUIDialogProgress *dlg = (CGUIDialogProgress *)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); unsigned int time = XbmcThreads::SystemClockMillis(); while (m_running) { m_event.WaitMSec(1000 / 30); if (!m_running) break; // start the dialog up as needed if (dlg && !dlg->IsDialogRunning() && (XbmcThreads::SystemClockMillis() - time) > 500) // wait 0.5 seconds before starting dialog { dlg->SetHeading(CVariant{heading}); dlg->SetLine(0, CVariant{url1.GetWithoutUserDetails()}); dlg->SetLine(1, CVariant{url2.GetWithoutUserDetails()}); dlg->SetPercentage(0); dlg->StartModal(); } // and update the dialog as we go if (dlg && dlg->IsDialogRunning()) { dlg->SetHeading(CVariant{heading}); dlg->SetLine(0, CVariant{url1.Get()}); dlg->SetLine(1, CVariant{url2.Get()}); dlg->SetLine(2, CVariant{ StringUtils::Format("%2.2f KB/s", m_speed / 1024) }); dlg->SetPercentage(m_percent); dlg->Progress(); m_cancelled = dlg->IsCanceled(); } } if (dlg) dlg->Close(); return !m_cancelled && m_succeeded; }
void CGUIDialogPVRChannelManager::SaveList(void) { if (!m_bContainsChanges) return; /* display the progress dialog */ CGUIDialogProgress* pDlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); pDlgProgress->SetHeading(CVariant{190}); pDlgProgress->SetLine(0, CVariant{""}); pDlgProgress->SetLine(1, CVariant{328}); pDlgProgress->SetLine(2, CVariant{""}); pDlgProgress->StartModal(); pDlgProgress->Progress(); pDlgProgress->SetPercentage(0); /* persist all channels */ unsigned int iNextChannelNumber(0); CPVRChannelGroupPtr group = g_PVRChannelGroups->GetGroupAll(m_bIsRadio); if (!group) return; for (int iListPtr = 0; iListPtr < m_channelItems->Size(); iListPtr++) { CFileItemPtr pItem = m_channelItems->Get(iListPtr); if (!pItem->HasPVRChannelInfoTag()) continue; if (pItem->GetProperty("SupportsSettings").asBoolean()) RenameChannel(pItem); PersistChannel(pItem, group, &iNextChannelNumber); pDlgProgress->SetPercentage(iListPtr * 100 / m_channelItems->Size()); } group->SortAndRenumber(); group->Persist(); m_bContainsChanges = false; SetItemsUnchanged(); pDlgProgress->Close(); }
void CMusicLibraryQueue::CleanLibrary(bool showDialog /* = false */) { CGUIDialogProgress* progress = NULL; if (showDialog) { progress = g_windowManager.GetWindow<CGUIDialogProgress>(WINDOW_DIALOG_PROGRESS); if (progress) { progress->SetHeading(CVariant{ 700 }); progress->SetPercentage(0); progress->Open(); progress->ShowProgressBar(true); } } CMusicLibraryCleaningJob* cleaningJob = new CMusicLibraryCleaningJob(progress); AddJob(cleaningJob); // Wait for cleaning to complete or be canceled, but render every 20ms so that the // pointer movements work on dialog even when cleaning is reporting progress infrequently if (progress) progress->Wait(20); }
void CMusicLibraryQueue::ExportLibrary(const CLibExportSettings& settings, bool showDialog /* = false */) { CGUIDialogProgress* progress = NULL; if (showDialog) { progress = g_windowManager.GetWindow<CGUIDialogProgress>(WINDOW_DIALOG_PROGRESS); if (progress) { progress->SetHeading(CVariant{ 20196 }); //"Export music library" progress->SetText(CVariant{ 650 }); //"Exporting" progress->SetPercentage(0); progress->Open(); progress->ShowProgressBar(true); } } CMusicLibraryExportJob* exportJob = new CMusicLibraryExportJob(settings, progress); if (showDialog) { AddJob(exportJob); // Wait for export to complete or be canceled, but render every 10ms so that the // pointer movements work on dialog even when export is reporting progress infrequently if (progress) progress->Wait(); } else { m_modal = true; exportJob->DoWork(); delete exportJob; m_modal = false; Refresh(); } }
void CMusicLibraryQueue::CleanLibraryModal() { // We can't perform a modal library cleaning if other jobs are running if (IsRunning()) return; CGUIDialogProgress* progress = nullptr; progress = g_windowManager.GetWindow<CGUIDialogProgress>(WINDOW_DIALOG_PROGRESS); if (progress) { progress->SetHeading(CVariant{ 700 }); progress->SetPercentage(0); progress->Open(); progress->ShowProgressBar(true); } m_modal = true; m_cleaning = true; CMusicLibraryCleaningJob cleaningJob(progress); cleaningJob.DoWork(); m_cleaning = false; m_modal = false; Refresh(); }
void CPVRManager::ResetDatabase(bool bShowProgress /* = true */) { CLog::Log(LOGNOTICE,"PVRManager - %s - clearing the PVR database", __FUNCTION__); g_EpgContainer.Stop(); CGUIDialogProgress* pDlgProgress = NULL; if (bShowProgress) { pDlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); pDlgProgress->SetLine(0, StringUtils::EmptyString); pDlgProgress->SetLine(1, g_localizeStrings.Get(19186)); pDlgProgress->SetLine(2, StringUtils::EmptyString); pDlgProgress->StartModal(); pDlgProgress->Progress(); } if (m_addons && m_addons->IsPlaying()) { CLog::Log(LOGNOTICE,"PVRManager - %s - stopping playback", __FUNCTION__); g_application.getApplicationMessenger().MediaStop(); } if (bShowProgress) { pDlgProgress->SetPercentage(10); pDlgProgress->Progress(); } /* stop the thread */ if (g_guiSettings.GetBool("pvrmanager.enabled")) Stop(); if (bShowProgress) { pDlgProgress->SetPercentage(20); pDlgProgress->Progress(); } if (m_database && m_database->Open()) { /* clean the EPG database */ g_EpgContainer.Clear(true); if (bShowProgress) { pDlgProgress->SetPercentage(30); pDlgProgress->Progress(); } m_database->DeleteChannelGroups(); if (bShowProgress) { pDlgProgress->SetPercentage(50); pDlgProgress->Progress(); } /* delete all channels */ m_database->DeleteChannels(); if (bShowProgress) { pDlgProgress->SetPercentage(70); pDlgProgress->Progress(); } /* delete all channel settings */ m_database->DeleteChannelSettings(); if (bShowProgress) { pDlgProgress->SetPercentage(80); pDlgProgress->Progress(); } /* delete all client information */ m_database->DeleteClients(); if (bShowProgress) { pDlgProgress->SetPercentage(90); pDlgProgress->Progress(); } m_database->Close(); } CLog::Log(LOGNOTICE,"PVRManager - %s - PVR database cleared", __FUNCTION__); g_EpgContainer.Start(); if (g_guiSettings.GetBool("pvrmanager.enabled")) { CLog::Log(LOGNOTICE,"PVRManager - %s - restarting the PVRManager", __FUNCTION__); m_database->Open(); Cleanup(); Start(); } if (bShowProgress) { pDlgProgress->SetPercentage(100); pDlgProgress->Close(); } }
bool CCDDARipJob::DoWork() { CLog::Log(LOGINFO, "Start ripping track %s to %s", m_input.c_str(), m_output.c_str()); // if we are ripping to a samba share, rip it to hd first and then copy it it the share CFileItem file(m_output, false); if (file.IsRemote()) m_output = SetupTempFile(); if (m_output.IsEmpty()) { CLog::Log(LOGERROR, "CCDDARipper: Error opening file"); return false; } // init ripper CFile reader; CEncoder* encoder; if (!reader.Open(m_input,READ_CACHED) || !(encoder=SetupEncoder(reader))) { CLog::Log(LOGERROR, "Error: CCDDARipper::Init failed"); return false; } // setup the progress dialog CGUIDialogProgress* pDlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); CStdString strLine0, strLine1; int iTrack = atoi(m_input.substr(13, m_input.size() - 13 - 5).c_str()); strLine0.Format("%s %i", g_localizeStrings.Get(606).c_str(), iTrack); // Track Number: %i strLine1.Format("%s %s", g_localizeStrings.Get(607).c_str(), m_output.c_str()); // To: %s pDlgProgress->SetHeading(605); // Ripping pDlgProgress->SetLine(0, strLine0); pDlgProgress->SetLine(1, strLine1); pDlgProgress->SetLine(2, ""); pDlgProgress->StartModal(); pDlgProgress->ShowProgressBar(true); // show progress dialog pDlgProgress->Progress(); // start ripping int percent=0; int oldpercent=0; bool cancelled(false); int result; while (!cancelled && (result=RipChunk(reader, encoder, percent)) == 0) { cancelled = ShouldCancel(percent,100); cancelled |= pDlgProgress->IsCanceled(); if (percent > oldpercent) { oldpercent = percent; pDlgProgress->SetPercentage(percent); pDlgProgress->Progress(); } } pDlgProgress->Close(); // close encoder ripper encoder->Close(); delete encoder; reader.Close(); if (file.IsRemote() && !cancelled && result == 2) { // copy the ripped track to the share if (!CFile::Cache(m_output, file.GetPath())) { CLog::Log(LOGERROR, "CDDARipper: Error copying file from %s to %s", m_output.c_str(), file.GetPath().c_str()); CFile::Delete(m_output); return false; } // delete cached file CFile::Delete(m_output); } if (cancelled) { CLog::Log(LOGWARNING, "User Cancelled CDDA Rip"); CFile::Delete(m_output); } else if (result == 1) CLog::Log(LOGERROR, "CDDARipper: Error ripping %s", m_input.c_str()); else if (result < 0) CLog::Log(LOGERROR, "CDDARipper: Error encoding %s", m_input.c_str()); else { CLog::Log(LOGINFO, "Finished ripping %s", m_input.c_str()); if (m_eject) { CLog::Log(LOGINFO, "Ejecting CD"); g_mediaManager.EjectTray(); } } return !cancelled && result == 2; }
void CPVRManager::ResetDatabase(bool bResetEPGOnly /* = false */) { CLog::Log(LOGNOTICE,"PVRManager - %s - clearing the PVR database", __FUNCTION__); g_EpgContainer.Stop(); CGUIDialogProgress* pDlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); pDlgProgress->SetLine(0, StringUtils::EmptyString); pDlgProgress->SetLine(1, g_localizeStrings.Get(19186)); // All data in the PVR database is being erased pDlgProgress->SetLine(2, StringUtils::EmptyString); pDlgProgress->StartModal(); pDlgProgress->Progress(); if (m_addons && m_addons->IsPlaying()) { CLog::Log(LOGNOTICE,"PVRManager - %s - stopping playback", __FUNCTION__); CApplicationMessenger::Get().MediaStop(); } pDlgProgress->SetPercentage(10); pDlgProgress->Progress(); /* reset the EPG pointers */ m_database->ResetEPG(); /* stop the thread */ Stop(); pDlgProgress->SetPercentage(20); pDlgProgress->Progress(); if (!m_database) m_database = new CPVRDatabase; if (m_database && m_database->Open()) { /* clean the EPG database */ g_EpgContainer.Reset(); pDlgProgress->SetPercentage(30); pDlgProgress->Progress(); if (!bResetEPGOnly) { m_database->DeleteChannelGroups(); pDlgProgress->SetPercentage(50); pDlgProgress->Progress(); /* delete all channels */ m_database->DeleteChannels(); pDlgProgress->SetPercentage(70); pDlgProgress->Progress(); /* delete all channel settings */ m_database->DeleteChannelSettings(); pDlgProgress->SetPercentage(80); pDlgProgress->Progress(); /* delete all client information */ m_database->DeleteClients(); pDlgProgress->SetPercentage(90); pDlgProgress->Progress(); } m_database->Close(); } CLog::Log(LOGNOTICE,"PVRManager - %s - %s database cleared", __FUNCTION__, bResetEPGOnly ? "EPG" : "PVR and EPG"); if (g_guiSettings.GetBool("pvrmanager.enabled")) { CLog::Log(LOGNOTICE,"PVRManager - %s - restarting the PVRManager", __FUNCTION__); m_database->Open(); Cleanup(); Start(); } pDlgProgress->SetPercentage(100); pDlgProgress->Close(); }
bool CPluginDirectory::WaitOnScriptResult(const CStdString &scriptPath, const CStdString &scriptName) { const unsigned int timeBeforeProgressBar = 1500; const unsigned int timeToKillScript = 1000; DWORD startTime = timeGetTime(); CGUIDialogProgress *progressBar = NULL; CLog::Log(LOGDEBUG, "%s - waiting on the %s plugin...", __FUNCTION__, scriptName.c_str()); while (true) { // check if the python script is finished if (WaitForSingleObject(m_directoryFetched, 20) == WAIT_OBJECT_0) { // python has returned CLog::Log(LOGDEBUG, "%s- plugin returned %s", __FUNCTION__, m_success ? "successfully" : "failure"); break; } // check our script is still running int id = g_pythonParser.getScriptId(scriptPath.c_str()); if (id == -1) { // nope - bail CLog::Log(LOGDEBUG, " %s - plugin exited prematurely - terminating", __FUNCTION__); m_success = false; break; } // check whether we should pop up the progress dialog if (!progressBar && timeGetTime() - startTime > timeBeforeProgressBar) { // loading takes more then 1.5 secs, show a progress dialog progressBar = (CGUIDialogProgress *)m_gWindowManager.GetWindow(WINDOW_DIALOG_PROGRESS); if (progressBar) { progressBar->SetHeading(scriptName); progressBar->SetLine(0, 1040); progressBar->SetLine(1, ""); progressBar->SetLine(2, ""); progressBar->StartModal(); } } if (progressBar) { // update the progress bar and check for user cancel CStdString label; if (m_totalItems > 0) { label.Format(g_localizeStrings.Get(1042).c_str(), m_listItems->Size(), m_totalItems); progressBar->SetPercentage((int)((m_listItems->Size() * 100 ) / m_totalItems)); progressBar->ShowProgressBar(true); } else label.Format(g_localizeStrings.Get(1041).c_str(), m_listItems->Size()); progressBar->SetLine(2, label); progressBar->Progress(); if (progressBar->IsCanceled()) { // user has cancelled our process - cancel our process if (!m_cancelled) { m_cancelled = true; startTime = timeGetTime(); } if (m_cancelled && timeGetTime() - startTime > timeToKillScript) { // cancel our script int id = g_pythonParser.getScriptId(scriptPath.c_str()); if (id != -1 && g_pythonParser.isRunning(id)) { CLog::Log(LOGDEBUG, "%s- cancelling plugin %s", __FUNCTION__, scriptName.c_str()); g_pythonParser.stopScript(id); break; } } } } } if (progressBar) progressBar->Close(); return !m_cancelled && m_success; }
void CGUIDialogPVRChannelManager::SaveList() // XXX investigate: renumbering doesn't work { if (!m_bContainsChanges) return; CPVRDatabase *database = CPVRManager::Get()->GetTVDatabase(); if (!database || !database->Open()) return; CGUIDialogProgress* pDlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); pDlgProgress->SetHeading(190); pDlgProgress->SetLine(0, ""); pDlgProgress->SetLine(1, 328); pDlgProgress->SetLine(2, ""); pDlgProgress->StartModal(); pDlgProgress->Progress(); pDlgProgress->SetPercentage(0); int iActiveChannels = 0; for (int iListPtr = 0; iListPtr < m_channelItems->Size(); iListPtr++) { if (m_channelItems->Get(iListPtr)->GetPropertyBOOL("ActiveChannel")) ++iActiveChannels; } // int iNextChannelNumber = 1; // int iNextHiddenChannelNumber = iActiveChannels + 1; bool bHasChangedItems = false; for (int iListPtr = 0; iListPtr < m_channelItems->Size(); iListPtr++) { bool bChanged = false; CFileItemPtr pItem = m_channelItems->Get(iListPtr); if (!pItem) continue; CPVRChannel *channel = pItem->GetPVRChannelInfoTag(); if (!channel) { //TODO add new channel continue; } /* get values from the form */ bool bHidden = !pItem->GetPropertyBOOL("ActiveChannel"); bool bVirtual = pItem->GetPropertyBOOL("Virtual"); bool bEPGEnabled = pItem->GetPropertyBOOL("UseEPG"); int iEPGSource = pItem->GetPropertyInt("EPGSource"); CStdString strChannelName = pItem->GetProperty("Name"); CStdString strIconPath = pItem->GetProperty("Icon"); CStdString strStreamURL = pItem->GetProperty("StreamURL"); /* set new values in the channel tag */ // TODO // if (bHidden) // bChanged = channel->SetChannelNumber(iNextHiddenChannelNumber++) || bChanged; // else // bChanged = channel->SetChannelNumber(iNextChannelNumber++) || bChanged; bChanged = channel->SetChannelName(strChannelName) || bChanged; bChanged = channel->SetHidden(bHidden) || bChanged; bChanged = channel->SetIconPath(strIconPath) || bChanged; if (bVirtual) bChanged = channel->SetStreamURL(strStreamURL) || bChanged; if (iEPGSource == 0) bChanged = channel->SetEPGScraper("client") || bChanged; // TODO add other scrapers bChanged = channel->SetEPGEnabled(bEPGEnabled) || bChanged; if (bChanged) { bHasChangedItems = true; channel->Persist(true); } pItem->SetProperty("Changed", false); pDlgProgress->SetPercentage(iListPtr * 100 / m_channelItems->Size()); } if (bHasChangedItems) { database->CommitInsertQueries(); CPVRManager::Get()->Start(); // XXX not a nice way to refresh the channels, but works for now } database->Close(); m_bContainsChanges = false; pDlgProgress->Close(); }
void CPVRManager::ResetDatabase(bool bResetEPGOnly /* = false */) { CLog::Log(LOGNOTICE,"PVRManager - %s - clearing the PVR database", __FUNCTION__); g_EpgContainer.Stop(); CGUIDialogProgress* pDlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); pDlgProgress->SetHeading(CVariant{313}); pDlgProgress->SetLine(0, CVariant{g_localizeStrings.Get(19187)}); // All data in the PVR database is being erased pDlgProgress->SetLine(1, CVariant{""}); pDlgProgress->SetLine(2, CVariant{""}); pDlgProgress->Open(); pDlgProgress->Progress(); if (m_addons->IsPlaying()) { CLog::Log(LOGNOTICE,"PVRManager - %s - stopping playback", __FUNCTION__); CApplicationMessenger::GetInstance().SendMsg(TMSG_MEDIA_STOP); } pDlgProgress->SetPercentage(10); pDlgProgress->Progress(); /* reset the EPG pointers */ if (m_database) m_database->ResetEPG(); /* stop the thread */ Stop(); pDlgProgress->SetPercentage(20); pDlgProgress->Progress(); if (!m_database) m_database = new CPVRDatabase; if (m_database && m_database->Open()) { /* clean the EPG database */ g_EpgContainer.Reset(); pDlgProgress->SetPercentage(30); pDlgProgress->Progress(); if (!bResetEPGOnly) { m_database->DeleteChannelGroups(); pDlgProgress->SetPercentage(50); pDlgProgress->Progress(); /* delete all channels */ m_database->DeleteChannels(); pDlgProgress->SetPercentage(70); pDlgProgress->Progress(); /* delete all channel and recording settings */ CVideoDatabase videoDatabase; if (videoDatabase.Open()) { videoDatabase.EraseVideoSettings("pvr://channels/"); videoDatabase.EraseVideoSettings(CPVRRecordingsPath::PATH_RECORDINGS); videoDatabase.Close(); } pDlgProgress->SetPercentage(80); pDlgProgress->Progress(); /* delete all client information */ pDlgProgress->SetPercentage(90); pDlgProgress->Progress(); } m_database->Close(); } CLog::Log(LOGNOTICE,"PVRManager - %s - %s database cleared", __FUNCTION__, bResetEPGOnly ? "EPG" : "PVR and EPG"); CLog::Log(LOGNOTICE,"PVRManager - %s - restarting the PVRManager", __FUNCTION__); m_database->Open(); Cleanup(); Start(); pDlgProgress->SetPercentage(100); pDlgProgress->Close(); }
bool CPluginDirectory::WaitOnScriptResult(const CStdString &scriptPath, const CStdString &scriptName, bool retrievingDir) { const unsigned int timeBeforeProgressBar = 1500; const unsigned int timeToKillScript = 1000; unsigned int startTime = XbmcThreads::SystemClockMillis(); CGUIDialogProgress *progressBar = NULL; CLog::Log(LOGDEBUG, "%s - waiting on the %s plugin...", __FUNCTION__, scriptName.c_str()); while (true) { { CSingleExit ex(g_graphicsContext); // check if the python script is finished if (m_fetchComplete.WaitMSec(20)) { // python has returned CLog::Log(LOGDEBUG, "%s- plugin returned %s", __FUNCTION__, m_success ? "successfully" : "failure"); break; } } // check our script is still running #ifdef HAS_PYTHON if (!g_pythonParser.isRunning(g_pythonParser.getScriptId(scriptPath.c_str()))) #endif { // check whether we exited normally if (!m_fetchComplete.WaitMSec(0)) { // python didn't return correctly CLog::Log(LOGDEBUG, " %s - plugin exited prematurely - terminating", __FUNCTION__); m_success = false; } break; } // check whether we should pop up the progress dialog if (!progressBar && XbmcThreads::SystemClockMillis() - startTime > timeBeforeProgressBar) { // loading takes more then 1.5 secs, show a progress dialog progressBar = (CGUIDialogProgress *)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); // if script has shown progressbar don't override it if (progressBar && progressBar->IsActive()) { startTime = XbmcThreads::SystemClockMillis(); progressBar = NULL; } if (progressBar) { progressBar->SetHeading(scriptName); progressBar->SetLine(0, retrievingDir ? 1040 : 10214); progressBar->SetLine(1, ""); progressBar->SetLine(2, ""); progressBar->ShowProgressBar(retrievingDir); progressBar->StartModal(); } } if (progressBar) { // update the progress bar and check for user cancel if (retrievingDir) { CStdString label; if (m_totalItems > 0) { label.Format(g_localizeStrings.Get(1042).c_str(), m_listItems->Size(), m_totalItems); progressBar->SetPercentage((int)((m_listItems->Size() * 100 ) / m_totalItems)); progressBar->ShowProgressBar(true); } else label.Format(g_localizeStrings.Get(1041).c_str(), m_listItems->Size()); progressBar->SetLine(2, label); } progressBar->Progress(); if (progressBar->IsCanceled()) { // user has cancelled our process - cancel our process if (!m_cancelled) { m_cancelled = true; startTime = XbmcThreads::SystemClockMillis(); } if (m_cancelled && XbmcThreads::SystemClockMillis() - startTime > timeToKillScript) { // cancel our script #ifdef HAS_PYTHON int id = g_pythonParser.getScriptId(scriptPath.c_str()); if (id != -1 && g_pythonParser.isRunning(id)) { CLog::Log(LOGDEBUG, "%s- cancelling plugin %s", __FUNCTION__, scriptName.c_str()); g_pythonParser.stopScript(id); break; } #endif } } } } if (progressBar) CApplicationMessenger::Get().Close(progressBar, false, false); return !m_cancelled && m_success; }