void DialogProgressBG::update(int percent, const String& heading, const String& message) { DelayedCallGuard dcguard(languageHook); CGUIDialogProgressBarHandle* pHandle = handle; if (pHandle == NULL) throw WindowException("Dialog not created."); if (percent >= 0 && percent <= 100) pHandle->SetPercentage((float)percent); if (!heading.empty()) pHandle->SetTitle(heading); if (!message.empty()) pHandle->SetText(message); }
void DialogProgressBG::update(int percent, const String& heading, const String& message) throw (WindowException) { DelayedCallGuard dcguard(languageHook); CGUIDialogExtendedProgressBar* pDialog = dlg; CGUIDialogProgressBarHandle* pHandle = handle; if (pDialog == NULL) throw WindowException("Error: Window is NULL, this is not possible :-)"); if (percent >= 0 && percent <= 100) pHandle->SetPercentage((float)percent); if (!heading.empty()) pHandle->SetTitle(heading); if (!message.empty()) pHandle->SetText(message); }
bool CPVRClients::AutoconfigureClients(void) { bool bReturn(false); std::vector<PVR_CLIENT> autoConfigAddons; PVR_CLIENT addon; VECADDONS map; CAddonMgr::GetInstance().GetInstalledAddons(map, ADDON_PVRDLL); /** get the auto-configurable add-ons */ for (VECADDONS::iterator it = map.begin(); it != map.end(); ++it) { if (CAddonMgr::GetInstance().IsAddonDisabled((*it)->ID())) { addon = std::dynamic_pointer_cast<CPVRClient>(*it); if (addon->CanAutoconfigure()) autoConfigAddons.push_back(addon); } } /** no configurable add-ons found */ if (autoConfigAddons.empty()) return bReturn; /** display a progress bar while trying to auto-configure add-ons */ CGUIDialogExtendedProgressBar *loadingProgressDialog = (CGUIDialogExtendedProgressBar *)g_windowManager.GetWindow(WINDOW_DIALOG_EXT_PROGRESS); CGUIDialogProgressBarHandle* progressHandle = loadingProgressDialog->GetHandle(g_localizeStrings.Get(19688)); // Scanning for PVR services progressHandle->SetPercentage(0); progressHandle->SetText(g_localizeStrings.Get(19688)); //Scanning for PVR services /** start zeroconf and wait a second to get some responses */ CZeroconfBrowser::GetInstance()->Start(); for (std::vector<PVR_CLIENT>::iterator it = autoConfigAddons.begin(); !bReturn && it != autoConfigAddons.end(); ++it) (*it)->AutoconfigureRegisterType(); unsigned iIterations(0); float percentage(0.0f); float percentageStep(100.0f / PVR_CLIENT_AVAHI_SCAN_ITERATIONS); progressHandle->SetPercentage(percentage); /** while no add-ons were configured within 20 iterations */ while (!bReturn && iIterations++ < PVR_CLIENT_AVAHI_SCAN_ITERATIONS) { /** check each disabled add-on */ for (std::vector<PVR_CLIENT>::iterator it = autoConfigAddons.begin(); !bReturn && it != autoConfigAddons.end(); ++it) { if (addon->Autoconfigure()) { progressHandle->SetPercentage(100.0f); progressHandle->MarkFinished(); /** enable the add-on */ CAddonMgr::GetInstance().EnableAddon((*it)->ID()); CSingleLock lock(m_critSection); m_addons.push_back(*it); bReturn = true; } } /** wait a while and try again */ if (!bReturn) { percentage += percentageStep; progressHandle->SetPercentage(percentage); Sleep(PVR_CLIENT_AVAHI_SLEEP_TIME_MS); } } progressHandle->SetPercentage(100.0f); progressHandle->MarkFinished(); return bReturn; }
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.empty()) { CLog::Log(LOGERROR, "CCDDARipper: Error opening file"); return false; } // init ripper CFile reader; CEncoder* encoder = nullptr; if (!reader.Open(m_input,READ_CACHED) || !(encoder=SetupEncoder(reader))) { CLog::Log(LOGERROR, "Error: CCDDARipper::Init failed"); return false; } // setup the progress dialog CGUIDialogExtendedProgressBar* pDlgProgress = CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIDialogExtendedProgressBar>(WINDOW_DIALOG_EXT_PROGRESS); CGUIDialogProgressBarHandle* handle = pDlgProgress->GetHandle(g_localizeStrings.Get(605)); int iTrack = atoi(m_input.substr(13, m_input.size() - 13 - 5).c_str()); std::string strLine0 = StringUtils::Format("%02i. %s - %s", iTrack, m_tag.GetArtistString().c_str(), m_tag.GetTitle().c_str()); handle->SetText(strLine0); // 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); if (percent > oldpercent) { oldpercent = percent; handle->SetPercentage(static_cast<float>(percent)); } } // close encoder ripper encoder->CloseEncode(); delete encoder; reader.Close(); if (file.IsRemote() && !cancelled && result == 2) { // copy the ripped track to the share if (!CFile::Copy(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(); } } handle->MarkFinished(); return !cancelled && result == 2; }