PyObject* Dialog_OK(PyObject *self, PyObject *args) { const int window = WINDOW_DIALOG_OK; PyObject* unicodeLine[4]; for (int i = 0; i < 4; i++) unicodeLine[i] = NULL; CGUIDialogOK* pDialog = (CGUIDialogOK*)g_windowManager.GetWindow(window); if (PyXBMCWindowIsNull(pDialog)) return NULL; // get lines, last 2 lines are optional. string utf8Line[4]; if (!PyArg_ParseTuple(args, (char*)"OO|OO", &unicodeLine[0], &unicodeLine[1], &unicodeLine[2], &unicodeLine[3])) return NULL; for (int i = 0; i < 4; i++) { if (unicodeLine[i] && !PyXBMCGetUnicodeString(utf8Line[i], unicodeLine[i], i+1)) return NULL; } pDialog->SetHeading(utf8Line[0]); pDialog->SetLine(0, utf8Line[1]); pDialog->SetLine(1, utf8Line[2]); pDialog->SetLine(2, utf8Line[3]); //send message and wait for user input PyXBMCWaitForThreadMessage(TMSG_DIALOG_DOMODAL, window, ACTIVE_WINDOW); return Py_BuildValue((char*)"b", pDialog->IsConfirmed()); }
bool Dialog::ok(const String& heading, const String& line1, const String& line2, const String& line3) throw (WindowException) { DelayedCallGuard dcguard(languageHook); const int window = WINDOW_DIALOG_OK; CGUIDialogOK* pDialog = (CGUIDialogOK*)g_windowManager.GetWindow(window); if (pDialog == NULL) throw WindowException("Error: Window is NULL, this is not possible :-)"); if (!heading.empty()) pDialog->SetHeading(heading); if (!line1.empty()) pDialog->SetLine(0, line1); if (!line2.empty()) pDialog->SetLine(1, line2); if (!line3.empty()) pDialog->SetLine(2, line3); //send message and wait for user input XBMCWaitForThreadMessage(TMSG_DIALOG_DOMODAL, window, ACTIVE_WINDOW); return pDialog->IsConfirmed(); }
// \brief Show CGUIDialogOK dialog, then wait for user to dismiss it. void CGUIDialogOK::ShowAndGetInput(CVariant heading, CVariant text) { CGUIDialogOK *dialog = (CGUIDialogOK *)g_windowManager.GetWindow(WINDOW_DIALOG_OK); if (!dialog) return; dialog->SetHeading(heading); dialog->SetText(text); dialog->Open(); }
ADDON_STATUS CAddonDll::Create(void* funcTable, void* info) { /* ensure that a previous instance is destroyed */ Destroy(); if (!funcTable) return ADDON_STATUS_PERMANENT_FAILURE; CLog::Log(LOGDEBUG, "ADDON: Dll Initializing - %s", Name().c_str()); m_initialized = false; if (!LoadDll()) return ADDON_STATUS_PERMANENT_FAILURE; /* Load add-on function table (written by add-on itself) */ m_pDll->GetAddon(funcTable); if (!CheckAPIVersion()) return ADDON_STATUS_PERMANENT_FAILURE; /* Allocate the helper function class to allow crosstalk over helper libraries */ m_pHelpers = new CAddonInterfaces(this); /* Call Create to make connections, initializing data or whatever is needed to become the AddOn running */ ADDON_STATUS status = m_pDll->Create(m_pHelpers->GetCallbacks(), info); if (status == ADDON_STATUS_OK) { m_initialized = true; } else if ((status == ADDON_STATUS_NEED_SETTINGS) || (status == ADDON_STATUS_NEED_SAVEDSETTINGS)) { m_needsavedsettings = (status == ADDON_STATUS_NEED_SAVEDSETTINGS); if ((status = TransferSettings()) == ADDON_STATUS_OK) m_initialized = true; else new CAddonStatusHandler(ID(), status, "", false); } else { // Addon failed initialization CLog::Log(LOGERROR, "ADDON: Dll %s - Client returned bad status (%i) from Create and is not usable", Name().c_str(), status); CGUIDialogOK* pDialog = g_windowManager.GetWindow<CGUIDialogOK>(WINDOW_DIALOG_OK); if (pDialog) { std::string heading = StringUtils::Format("%s: %s", TranslateType(Type(), true).c_str(), Name().c_str()); pDialog->SetHeading(CVariant{heading}); pDialog->SetLine(1, CVariant{24070}); pDialog->SetLine(2, CVariant{24071}); pDialog->Open(); } } return status; }
void CVideoInfoDownloader::ShowErrorDialog(const ADDON::CScraperError &sce) { if (!sce.Title().empty()) { CGUIDialogOK *pdlg = (CGUIDialogOK *)g_windowManager.GetWindow(WINDOW_DIALOG_OK); pdlg->SetHeading(sce.Title()); pdlg->SetLine(0, sce.Message()); CApplicationMessenger::Get().DoModal(pdlg, WINDOW_DIALOG_OK); } }
// \brief Show CGUIDialogOK dialog, then wait for user to dismiss it. bool CGUIDialogOK::ShowAndGetInput(CVariant heading, CVariant text) { CGUIDialogOK *dialog = g_windowManager.GetWindow<CGUIDialogOK>(WINDOW_DIALOG_OK); if (!dialog) return false; dialog->SetHeading(heading); dialog->SetText(text); dialog->Open(); return dialog->IsConfirmed(); }
void CVideoInfoDownloader::ShowErrorDialog(const ADDON::CScraperError &sce) { if (!sce.Title().empty()) { CGUIDialogOK *pdlg = (CGUIDialogOK *)g_windowManager.GetWindow(WINDOW_DIALOG_OK); pdlg->SetHeading(CVariant{sce.Title()}); pdlg->SetLine(0, CVariant{sce.Message()}); pdlg->Open(); } }
// \brief Show CGUIDialogOK dialog, then wait for user to dismiss it. void CGUIDialogOK::ShowAndGetInput(const CVariant &heading, const CVariant &line0, const CVariant &line1, const CVariant &line2) { CGUIDialogOK *dialog = (CGUIDialogOK *)g_windowManager.GetWindow(WINDOW_DIALOG_OK); if (!dialog) return; dialog->SetHeading(heading); dialog->SetLine(0, line0); dialog->SetLine(1, line1); dialog->SetLine(2, line2); dialog->DoModal(); }
// \brief Show CGUIDialogOK dialog, then wait for user to dismiss it. void CGUIDialogOK::ShowAndGetInput(CVariant heading, CVariant line0, CVariant line1, CVariant line2) { CGUIDialogOK *dialog = (CGUIDialogOK *)g_windowManager.GetWindow(WINDOW_DIALOG_OK); if (!dialog) return; dialog->SetHeading(heading); dialog->SetLine(0, line0); dialog->SetLine(1, line1); dialog->SetLine(2, line2); dialog->Open(); }
// \brief Show CGUIDialogOK dialog, then wait for user to dismiss it. bool CGUIDialogOK::ShowAndGetInput(CVariant heading, CVariant line0, CVariant line1, CVariant line2) { CGUIDialogOK *dialog = g_windowManager.GetWindow<CGUIDialogOK>(WINDOW_DIALOG_OK); if (!dialog) return false; dialog->SetHeading(heading); dialog->SetLine(0, line0); dialog->SetLine(1, line1); dialog->SetLine(2, line2); dialog->Open(); return dialog->IsConfirmed(); }
void CAddonStatusHandler::Process() { CSingleLock lock(m_critSection); std::string heading = StringUtils::Format("%s: %s", TranslateType(m_addon->Type(), true).c_str(), m_addon->Name().c_str()); /* Request to restart the AddOn and data structures need updated */ if (m_status == ADDON_STATUS_NEED_RESTART) { CGUIDialogOK* pDialog = (CGUIDialogOK*)g_windowManager.GetWindow(WINDOW_DIALOG_OK); if (!pDialog) return; pDialog->SetHeading(CVariant{heading}); pDialog->SetLine(1, CVariant{24074}); pDialog->Open(); CAddonMgr::GetInstance().GetCallbackForType(m_addon->Type())->RequestRestart(m_addon, true); } /* Some required settings are missing/invalid */ else if ((m_status == ADDON_STATUS_NEED_SETTINGS) || (m_status == ADDON_STATUS_NEED_SAVEDSETTINGS)) { CGUIDialogYesNo* pDialogYesNo = (CGUIDialogYesNo*)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO); if (!pDialogYesNo) return; pDialogYesNo->SetHeading(CVariant{heading}); pDialogYesNo->SetLine(1, CVariant{24070}); pDialogYesNo->SetLine(2, CVariant{24072}); pDialogYesNo->SetLine(3, CVariant{m_message}); pDialogYesNo->Open(); if (!pDialogYesNo->IsConfirmed()) return; if (!m_addon->HasSettings()) return; if (CGUIDialogAddonSettings::ShowAndGetInput(m_addon)) { //! @todo Doesn't dialogaddonsettings save these automatically? It should do this. m_addon->SaveSettings(); CAddonMgr::GetInstance().GetCallbackForType(m_addon->Type())->RequestRestart(m_addon, true); } } }
bool Dialog::ok(const String& heading, const String& line1, const String& line2, const String& line3) { DelayedCallGuard dcguard(languageHook); CGUIDialogOK* pDialog = (CGUIDialogOK*)g_windowManager.GetWindow(WINDOW_DIALOG_OK); if (pDialog == NULL) throw WindowException("Error: Window is NULL, this is not possible :-)"); if (!heading.empty()) pDialog->SetHeading(CVariant{heading}); if (!line1.empty()) pDialog->SetLine(0, CVariant{line1}); if (!line2.empty()) pDialog->SetLine(1, CVariant{line2}); if (!line3.empty()) pDialog->SetLine(2, CVariant{line3}); pDialog->Open(); return pDialog->IsConfirmed(); }
void CGUIWindowMusicBase::OnRipCD() { if(g_mediaManager.IsAudio()) { if (!g_application.CurrentFileItem().IsCDDA()) { #ifdef HAS_CDDA_RIPPER CCDDARipper ripper; ripper.RipCD(); #endif } else { CGUIDialogOK* pDlgOK = (CGUIDialogOK*)g_windowManager.GetWindow(WINDOW_DIALOG_OK); pDlgOK->SetHeading(257); // Error pDlgOK->SetLine(0, g_localizeStrings.Get(20099)); // pDlgOK->SetLine(1, ""); // pDlgOK->SetLine(2, ""); pDlgOK->DoModal(); } } }
void CGUIWindowMusicBase::OnRipTrack(int iItem) { CCdInfo *pCdInfo = CDetectDVDMedia::GetCdInfo(); if (CDetectDVDMedia::IsDiscInDrive() && pCdInfo && pCdInfo->IsAudio(1)) { if (!g_application.CurrentFileItem().IsCDDA()) { #ifdef HAS_CDDA_RIPPER CCDDARipper ripper; ripper.RipTrack(m_vecItems->Get(iItem)); #endif } else { CGUIDialogOK* pDlgOK = (CGUIDialogOK*)m_gWindowManager.GetWindow(WINDOW_DIALOG_OK); pDlgOK->SetHeading(257); // Error pDlgOK->SetLine(0, g_localizeStrings.Get(20099)); // pDlgOK->SetLine(1, ""); // pDlgOK->SetLine(2, ""); pDlgOK->DoModal(); } } }
bool IDirectory::ProcessRequirements() { CStdString type = m_requirements["type"].asString(); if (type == "keyboard") { CStdString input; if (CGUIDialogKeyboard::ShowAndGetInput(input, GetLocalized(m_requirements["heading"]), false)) { m_requirements["input"] = input.c_str(); return true; } } else if (type == "authenticate") { CURL url(m_requirements["url"].asString()); if (CPasswordManager::GetInstance().PromptToAuthenticateURL(url)) { m_requirements.clear(); return true; } } else if (type == "error") { CGUIDialogOK *dialog = (CGUIDialogOK *)g_windowManager.GetWindow(WINDOW_DIALOG_OK); if (dialog) { dialog->SetHeading(GetLocalized(m_requirements["heading"])); dialog->SetLine(0, GetLocalized(m_requirements["line1"])); dialog->SetLine(1, GetLocalized(m_requirements["line2"])); dialog->SetLine(2, GetLocalized(m_requirements["line3"])); dialog->DoModal(); } } m_requirements.clear(); return false; }
void CAddonStatusHandler::Process() { CSingleLock lock(m_critSection); std::string heading = StringUtils::Format("%s: %s", TranslateType(m_addon->Type(), true).c_str(), m_addon->Name().c_str()); /* AddOn lost connection to his backend (for ones that use Network) */ if (m_status == ADDON_STATUS_LOST_CONNECTION) { if (m_addon->Type() == ADDON_PVRDLL) { if (!CSettings::Get().GetBool("pvrmanager.hideconnectionlostwarning")) CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, m_addon->Name().c_str(), g_localizeStrings.Get(36030)); // connection lost // TODO handle disconnects after the add-on's been initialised } else { CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO); if (!pDialog) return; pDialog->SetHeading(heading); pDialog->SetLine(1, 24070); pDialog->SetLine(2, 24073); //send message and wait for user input ThreadMessage tMsg = {TMSG_DIALOG_DOMODAL, WINDOW_DIALOG_YES_NO, g_windowManager.GetActiveWindow()}; CApplicationMessenger::Get().SendMessage(tMsg, true); if (pDialog->IsConfirmed()) CAddonMgr::Get().GetCallbackForType(m_addon->Type())->RequestRestart(m_addon, false); } } /* Request to restart the AddOn and data structures need updated */ else if (m_status == ADDON_STATUS_NEED_RESTART) { CGUIDialogOK* pDialog = (CGUIDialogOK*)g_windowManager.GetWindow(WINDOW_DIALOG_OK); if (!pDialog) return; pDialog->SetHeading(heading); pDialog->SetLine(1, 24074); //send message and wait for user input ThreadMessage tMsg = {TMSG_DIALOG_DOMODAL, WINDOW_DIALOG_OK, g_windowManager.GetActiveWindow()}; CApplicationMessenger::Get().SendMessage(tMsg, true); CAddonMgr::Get().GetCallbackForType(m_addon->Type())->RequestRestart(m_addon, true); } /* Some required settings are missing/invalid */ else if ((m_status == ADDON_STATUS_NEED_SETTINGS) || (m_status == ADDON_STATUS_NEED_SAVEDSETTINGS)) { CGUIDialogYesNo* pDialogYesNo = (CGUIDialogYesNo*)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO); if (!pDialogYesNo) return; pDialogYesNo->SetHeading(heading); pDialogYesNo->SetLine(1, 24070); pDialogYesNo->SetLine(2, 24072); pDialogYesNo->SetLine(3, m_message); //send message and wait for user input ThreadMessage tMsg = {TMSG_DIALOG_DOMODAL, WINDOW_DIALOG_YES_NO, g_windowManager.GetActiveWindow()}; CApplicationMessenger::Get().SendMessage(tMsg, true); if (!pDialogYesNo->IsConfirmed()) return; if (!m_addon->HasSettings()) return; if (CGUIDialogAddonSettings::ShowAndGetInput(m_addon)) { //todo doesn't dialogaddonsettings save these automatically? should do m_addon->SaveSettings(); CAddonMgr::Get().GetCallbackForType(m_addon->Type())->RequestRestart(m_addon, true); } } /* A unknown event has occurred */ else if (m_status == ADDON_STATUS_UNKNOWN) { CGUIDialogOK* pDialog = (CGUIDialogOK*)g_windowManager.GetWindow(WINDOW_DIALOG_OK); if (!pDialog) return; pDialog->SetHeading(heading); pDialog->SetLine(1, 24070); pDialog->SetLine(2, 24071); pDialog->SetLine(3, m_message); //send message and wait for user input ThreadMessage tMsg = {TMSG_DIALOG_DOMODAL, WINDOW_DIALOG_OK, g_windowManager.GetActiveWindow()}; CApplicationMessenger::Get().SendMessage(tMsg, true); } }
void CAddonStatusHandler::Process() { CSingleLock lock(m_critSection); CStdString heading; heading.Format("%s: %s", TranslateType(m_addon->Type(), true).c_str(), m_addon->Name().c_str()); /* AddOn lost connection to his backend (for ones that use Network) */ if (m_status == ADDON_STATUS_LOST_CONNECTION && m_addon->Type() != ADDON_PVRDLL) // TODO display a proper message for pvr addons, but don't popup a dialog that requires user action { CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO); if (!pDialog) return; pDialog->SetHeading(heading); pDialog->SetLine(1, 24070); pDialog->SetLine(2, 24073); //send message and wait for user input ThreadMessage tMsg = {TMSG_DIALOG_DOMODAL, WINDOW_DIALOG_YES_NO, g_windowManager.GetActiveWindow()}; g_application.getApplicationMessenger().SendMessage(tMsg, true); if (pDialog->IsConfirmed()) CAddonMgr::Get().GetCallbackForType(m_addon->Type())->RequestRestart(m_addon, false); } /* Request to restart the AddOn and data structures need updated */ else if (m_status == ADDON_STATUS_NEED_RESTART) { CGUIDialogOK* pDialog = (CGUIDialogOK*)g_windowManager.GetWindow(WINDOW_DIALOG_OK); if (!pDialog) return; pDialog->SetHeading(heading); pDialog->SetLine(1, 24074); //send message and wait for user input ThreadMessage tMsg = {TMSG_DIALOG_DOMODAL, WINDOW_DIALOG_OK, g_windowManager.GetActiveWindow()}; g_application.getApplicationMessenger().SendMessage(tMsg, true); CAddonMgr::Get().GetCallbackForType(m_addon->Type())->RequestRestart(m_addon, true); } /* Some required settings are missing/invalid */ else if ((m_status == ADDON_STATUS_NEED_SETTINGS) || (m_status == ADDON_STATUS_NEED_SAVEDSETTINGS)) { CGUIDialogYesNo* pDialogYesNo = (CGUIDialogYesNo*)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO); if (!pDialogYesNo) return; pDialogYesNo->SetHeading(heading); pDialogYesNo->SetLine(1, 24070); pDialogYesNo->SetLine(2, 24072); pDialogYesNo->SetLine(3, m_message); //send message and wait for user input ThreadMessage tMsg = {TMSG_DIALOG_DOMODAL, WINDOW_DIALOG_YES_NO, g_windowManager.GetActiveWindow()}; g_application.getApplicationMessenger().SendMessage(tMsg, true); if (!pDialogYesNo->IsConfirmed()) return; if (!m_addon->HasSettings()) return; if (CGUIDialogAddonSettings::ShowAndGetInput(m_addon)) { //todo doesn't dialogaddonsettings save these automatically? should do m_addon->SaveSettings(); CAddonMgr::Get().GetCallbackForType(m_addon->Type())->RequestRestart(m_addon, true); } } /* A unknown event has occurred */ else if (m_status == ADDON_STATUS_UNKNOWN) { //CAddonMgr::Get().DisableAddon(m_addon->ID()); CGUIDialogOK* pDialog = (CGUIDialogOK*)g_windowManager.GetWindow(WINDOW_DIALOG_OK); if (!pDialog) return; pDialog->SetHeading(heading); pDialog->SetLine(1, 24070); pDialog->SetLine(2, 24071); pDialog->SetLine(3, m_message); //send message and wait for user input ThreadMessage tMsg = {TMSG_DIALOG_DOMODAL, WINDOW_DIALOG_OK, g_windowManager.GetActiveWindow()}; g_application.getApplicationMessenger().SendMessage(tMsg, true); } }
bool CGUIWindowBoxeeWizardNetwork::OnAction(const CAction &action) { int iControl = GetFocusedControlID(); if (action.wID == ACTION_PREVIOUS_MENU || (action.wID == ACTION_SELECT_ITEM && iControl == CONTROL_BACK)) { Close(); } else if (action.wID == ACTION_SELECT_ITEM && iControl == CONTROL_INTERFACES) { ShowWirelessNetworksIfNeeded(); CGUIListContainer *pList = (CGUIListContainer *)GetControl(CONTROL_INTERFACES); if (pList) pList->SetSingleSelectedItem(); return true; } else if (action.wID == ACTION_MOVE_LEFT && iControl == CONTROL_WIRELESS) { ShowInterfaces(); SET_CONTROL_FOCUS(CONTROL_INTERFACES, 0); CGUIListContainer *pList = (CGUIListContainer *)GetControl(CONTROL_WIRELESS); if (pList) pList->SetSingleSelectedItem(); return true; } else if (action.wID == ACTION_SELECT_ITEM && iControl == CONTROL_WIRELESS) { ShowPasswordIfNeeded(); CGUIListContainer *pList = (CGUIListContainer *)GetControl(CONTROL_WIRELESS); if (pList) pList->SetSingleSelectedItem(); return true; } else if (action.wID == ACTION_SELECT_ITEM && iControl == CONTROL_PASSWORD) { CGUIButtonControl* passwordButton = (CGUIButtonControl*) GetControl(iControl); CStdString password = passwordButton->GetLabel(); if (CGUIDialogKeyboard::ShowAndGetInput(password, g_localizeStrings.Get(789), false)) { passwordButton->SetLabel(password); CONTROL_ENABLE(CONTROL_NEXT); SET_CONTROL_FOCUS(CONTROL_NEXT, 0); } return true; } else if (action.wID == ACTION_SELECT_ITEM && iControl == CONTROL_ENC) { CGUIButtonControl* encSelectionButton = (CGUIButtonControl*) GetControl(CONTROL_ENC_SELECTION); CGUIMessage msg(GUI_MSG_ITEM_SELECTED, GetID(), CONTROL_ENC); OnMessage(msg); int iItem = msg.GetParam1(); encSelectionButton->SetLabel(ENC_LABELS[iItem]); SET_CONTROL_HIDDEN(CONTROL_ENC); if (iItem == ENC_NONE) { SET_CONTROL_HIDDEN(CONTROL_PASSWORD_GROUP); SET_CONTROL_FOCUS(CONTROL_NEXT, 0); } else { SET_CONTROL_FOCUS(CONTROL_PASSWORD, 0); } return true; } else if (action.wID == ACTION_MOVE_LEFT && (iControl == CONTROL_ENC_SELECTION || iControl == CONTROL_PASSWORD)) { SET_CONTROL_HIDDEN(CONTROL_ENC_GROUP); SET_CONTROL_HIDDEN(CONTROL_PASSWORD_GROUP); SET_CONTROL_FOCUS(CONTROL_WIRELESS, 0); return true; } else if (action.wID == ACTION_MOVE_DOWN && iControl == CONTROL_ENC_SELECTION) { if (GetControl(CONTROL_PASSWORD_GROUP)->IsVisible()) { SET_CONTROL_FOCUS(CONTROL_PASSWORD, 0); } else if (!GetControl(CONTROL_NEXT)->IsDisabled()) { SET_CONTROL_FOCUS(CONTROL_NEXT, 0); } return true; } else if (action.wID == ACTION_MOVE_UP && (iControl == CONTROL_NEXT || iControl == CONTROL_BACK)) { if (GetControl(CONTROL_PASSWORD_GROUP)->IsVisible()) { SET_CONTROL_FOCUS(CONTROL_PASSWORD, 0); } else if (GetControl(CONTROL_ENC_GROUP)->IsVisible()) { SET_CONTROL_FOCUS(CONTROL_ENC_SELECTION, 0); } else { SET_CONTROL_FOCUS(CONTROL_INTERFACES, 0); } return true; } else if (action.wID == ACTION_SELECT_ITEM && iControl == CONTROL_NEXT) { if (GetControl(CONTROL_ENC_SELECTION)->IsVisible() && GetControl(CONTROL_PASSWORD)->IsVisible()) { CGUIMessage msg(GUI_MSG_ITEM_SELECTED, GetID(), CONTROL_ENC); OnMessage(msg); int iItem = msg.GetParam1(); CGUIButtonControl* passwordButton = (CGUIButtonControl*) GetControl(CONTROL_PASSWORD); CStdString password = passwordButton->GetLabel(); if (ENC_MODES[iItem] == ENC_WEP_HEX && !IsHexString(password)) { CGUIDialogOK *pDialogOK = (CGUIDialogOK *)m_gWindowManager.GetWindow(WINDOW_DIALOG_OK); pDialogOK->SetHeading(""); pDialogOK->SetLine(0, 51018); pDialogOK->SetLine(1, 51019); pDialogOK->DoModal(); return true; } } if (SaveConfiguration()) { // Close all wizard dialogs Close(); CGUIDialog* dialog = (CGUIDialog*) m_gWindowManager.GetWindow(WINDOW_BOXEE_WIZARD_AUDIO); dialog->Close(); dialog = (CGUIDialog*) m_gWindowManager.GetWindow(WINDOW_BOXEE_WIZARD_RESOLUTION); dialog->Close(); } return true; } return CGUIWindow::OnAction(action); }
int CIMDB::InternalFindMovie(const CStdString &strMovie, IMDB_MOVIELIST& movielist, bool& sortMovieList, const CStdString& strFunction, CScraperUrl* pUrl) { movielist.clear(); CScraperUrl scrURL; CStdString strName = strMovie; CStdString movieTitle, movieTitleAndYear, movieYear; CUtil::CleanString(strName, movieTitle, movieTitleAndYear, movieYear, true); movieTitle.ToLower(); CLog::Log(LOGDEBUG, "%s: Searching for '%s' using %s scraper (file: '%s', content: '%s', language: '%s', date: '%s', framework: '%s')", __FUNCTION__, movieTitle.c_str(), m_info.strTitle.c_str(), m_info.strPath.c_str(), m_info.strContent.c_str(), m_info.strLanguage.c_str(), m_info.strDate.c_str(), m_info.strFramework.c_str()); if (!pUrl) { if (m_parser.HasFunction("CreateSearchUrl")) { GetURL(strMovie, movieTitle, movieYear, scrURL); } else if (m_info.strContent.Equals("musicvideos")) { if (!m_parser.HasFunction("FileNameScrape")) return false; CScraperUrl scrURL("filenamescrape"); scrURL.strTitle = strMovie; movielist.push_back(scrURL); return 1; } if (scrURL.m_xml.IsEmpty()) return 0; } else scrURL = *pUrl; vector<CStdString> strHTML; for (unsigned int i=0;i<scrURL.m_url.size();++i) { CStdString strCurrHTML; if (!CScraperUrl::Get(scrURL.m_url[i],strCurrHTML,m_http) || strCurrHTML.size() == 0) return 0; strHTML.push_back(strCurrHTML); } // now grab our details using the scraper for (unsigned int i=0;i<strHTML.size();++i) m_parser.m_param[i] = strHTML[i]; m_parser.m_param[strHTML.size()] = scrURL.m_url[0].m_url; CStdString strXML = m_parser.Parse(strFunction,&m_info.settings); //CLog::Log(LOGDEBUG,"scraper: %s returned %s",strFunction.c_str(),strXML.c_str()); if (strXML.IsEmpty()) { CLog::Log(LOGERROR, "%s: Unable to parse web site",__FUNCTION__); return 0; } if (!XMLUtils::HasUTF8Declaration(strXML)) g_charsetConverter.unknownToUTF8(strXML); // ok, now parse the xml file TiXmlDocument doc; doc.Parse(strXML.c_str(),0,TIXML_ENCODING_UTF8); if (!doc.RootElement()) { CLog::Log(LOGERROR, "%s: Unable to parse xml",__FUNCTION__); return 0; } if (stricmp(doc.RootElement()->Value(),"error")==0) { TiXmlElement* title = doc.RootElement()->FirstChildElement("title"); CStdString strTitle; if (title && title->FirstChild() && title->FirstChild()->Value()) strTitle = title->FirstChild()->Value(); TiXmlElement* message = doc.RootElement()->FirstChildElement("message"); CStdString strMessage; if (message && message->FirstChild() && message->FirstChild()->Value()) strMessage = message->FirstChild()->Value(); CGUIDialogOK* dialog = (CGUIDialogOK*)g_windowManager.GetWindow(WINDOW_DIALOG_OK); dialog->SetHeading(strTitle); dialog->SetLine(0,strMessage); g_application.getApplicationMessenger().DoModal(dialog,WINDOW_DIALOG_OK); return -1; } TiXmlHandle docHandle( &doc ); TiXmlElement* xurl = doc.RootElement()->FirstChildElement("url"); while (xurl && xurl->FirstChild()) { const char* szFunction = xurl->Attribute("function"); if (szFunction) { CScraperUrl scrURL(xurl); InternalFindMovie(strMovie,movielist,sortMovieList,szFunction,&scrURL); } xurl = xurl->NextSiblingElement("url"); } TiXmlElement *movie = docHandle.FirstChild( "results" ).FirstChild( "entity" ).Element(); if (!movie) return 0; while (movie) { // is our result already sorted correctly when handed over from scraper? if so, do not let xbmc sort it if (sortMovieList) { TiXmlElement* results = docHandle.FirstChild("results").Element(); if (results) { CStdString szSorted = results->Attribute("sorted"); sortMovieList = (szSorted.CompareNoCase("yes") != 0); } } CScraperUrl url; TiXmlNode *title = movie->FirstChild("title"); TiXmlElement *link = movie->FirstChildElement("url"); TiXmlNode *year = movie->FirstChild("year"); TiXmlNode* id = movie->FirstChild("id"); TiXmlNode* language = movie->FirstChild("language"); if (title && title->FirstChild() && link && link->FirstChild()) { url.strTitle = title->FirstChild()->Value(); while (link && link->FirstChild()) { url.ParseElement(link); link = link->NextSiblingElement("url"); } if (id && id->FirstChild()) url.strId = id->FirstChild()->Value(); // calculate the relavance of this hit CStdString compareTitle = url.strTitle; compareTitle.ToLower(); CStdString matchTitle = movieTitle; matchTitle.ToLower(); // see if we need to add year information CStdString compareYear; if(year && year->FirstChild()) compareYear = year->FirstChild()->Value(); if (!movieYear.IsEmpty() && !compareYear.IsEmpty()) { matchTitle.AppendFormat(" (%s)", movieYear.c_str()); compareTitle.AppendFormat(" (%s)", compareYear.c_str()); } url.relevance = fstrcmp(matchTitle.c_str(), compareTitle.c_str(), 0); // reconstruct a title for the user CStdString title = url.strTitle; if (!compareYear.IsEmpty()) title.AppendFormat(" (%s)", compareYear.c_str()); if (language && language->FirstChild()) title.AppendFormat(" (%s)", language->FirstChild()->Value()); url.strTitle = title; movielist.push_back(url); } movie = movie->NextSiblingElement(); } return 1; }
bool CAddonDll::LoadDll() { if (m_pDll) return true; std::string strFileName; std::string strAltFileName; if (!m_bIsChild) { strFileName = LibPath(); } else { std::string libPath = LibPath(); if (!XFILE::CFile::Exists(libPath)) { std::string temp = CSpecialProtocol::TranslatePath("special://xbmc/"); std::string tempbin = CSpecialProtocol::TranslatePath("special://xbmcbin/"); libPath.erase(0, temp.size()); libPath = tempbin + libPath; if (!XFILE::CFile::Exists(libPath)) { CLog::Log(LOGERROR, "ADDON: Could not locate %s", m_props.libname.c_str()); return false; } } std::stringstream childcount; childcount << GetChildCount(); std::string extension = URIUtils::GetExtension(libPath); strFileName = "special://temp/" + ID() + "-" + childcount.str() + extension; XFILE::CFile::Copy(libPath, strFileName); m_parentLib = libPath; CLog::Log(LOGNOTICE, "ADDON: Loaded virtual child addon %s", strFileName.c_str()); } /* Check if lib being loaded exists, else check in XBMC binary location */ #if defined(TARGET_ANDROID) // Android libs MUST live in this path, else multi-arch will break. // The usual soname requirements apply. no subdirs, and filename is ^lib.*\.so$ if (!XFILE::CFile::Exists(strFileName)) { std::string tempbin = getenv("XBMC_ANDROID_LIBS"); strFileName = tempbin + "/" + m_props.libname; } #endif if (!XFILE::CFile::Exists(strFileName)) { std::string altbin = CSpecialProtocol::TranslatePath("special://xbmcaltbinaddons/"); if (!altbin.empty()) { strAltFileName = altbin + m_props.libname; if (!XFILE::CFile::Exists(strAltFileName)) { std::string temp = CSpecialProtocol::TranslatePath("special://xbmc/addons/"); strAltFileName = strFileName; strAltFileName.erase(0, temp.size()); strAltFileName = altbin + strAltFileName; } CLog::Log(LOGDEBUG, "ADDON: Trying to load %s", strAltFileName.c_str()); } if (XFILE::CFile::Exists(strAltFileName)) strFileName = strAltFileName; else { std::string temp = CSpecialProtocol::TranslatePath("special://xbmc/"); std::string tempbin = CSpecialProtocol::TranslatePath("special://xbmcbin/"); strFileName.erase(0, temp.size()); strFileName = tempbin + strFileName; if (!XFILE::CFile::Exists(strFileName)) { CLog::Log(LOGERROR, "ADDON: Could not locate %s", m_props.libname.c_str()); return false; } } } /* Load the Dll */ m_pDll = new DllAddon; m_pDll->SetFile(strFileName); m_pDll->EnableDelayedUnload(false); if (!m_pDll->Load()) { delete m_pDll; m_pDll = NULL; CGUIDialogOK* pDialog = g_windowManager.GetWindow<CGUIDialogOK>(WINDOW_DIALOG_OK); if (pDialog) { std::string heading = StringUtils::Format("%s: %s", TranslateType(Type(), true).c_str(), Name().c_str()); pDialog->SetHeading(CVariant{heading}); pDialog->SetLine(1, CVariant{24070}); pDialog->SetLine(2, CVariant{24071}); pDialog->SetLine(2, CVariant{"Can't load shared library"}); pDialog->Open(); } return false; } return true; }
bool WatchDog::CCheckInternetConnectionJob::LoginUserAfterInternetConnectionRestore() { BOXEE::BXObject userObj(false); int lastUsedProfileIndex = g_settings.m_iLastUsedProfileIndex; BOXEE::BXCredentials creds; creds.SetUserName(g_settings.m_vecProfiles[lastUsedProfileIndex].getID()); creds.SetPassword(g_settings.m_vecProfiles[lastUsedProfileIndex].getLockCode()); BOXEE::BXLoginStatus loginStatus = BOXEE::Boxee::GetInstance().Login(creds,userObj); if ((loginStatus != BOXEE::LOGIN_SUCCESS) || !userObj.IsValid()) { CLog::Log(LOGWARNING,"CCheckInternetConnectionJob::LoginUserAfterInternetConnectionRestore - FAILED to login [loginStatus=%d] -> logout. [server=%d][internet=%d] (offline)",loginStatus,m_jobHandler->IsConnectedToServer(),m_jobHandler->IsConnectedToInternet()); CGUIDialogOK* pDialog = (CGUIDialogOK*)g_windowManager.GetWindow(WINDOW_DIALOG_OK); pDialog->SetHeading(257); pDialog->SetLine(0, 53480); pDialog->SetLine(1, ""); pDialog->SetLine(2, ""); ThreadMessage tMsgNotify(TMSG_DIALOG_DOMODAL, WINDOW_DIALOG_OK, g_windowManager.GetActiveWindow()); g_application.getApplicationMessenger().SendMessage(tMsgNotify, true); ThreadMessage tMsgLogout(TMSG_LOGOUT); g_application.getApplicationMessenger().SendMessage(tMsgLogout, false); return false; } CLog::Log(LOGDEBUG,"CCheckInternetConnectionJob::LoginUserAfterInternetConnectionRestore - Succeeded to login user [user=%s][loginStatus=%d] -> logout. [server=%d][internet=%d] (offline)(login)",creds.GetUserName().c_str(),loginStatus,m_jobHandler->IsConnectedToServer(),m_jobHandler->IsConnectedToInternet()); BoxeeUtils::UpdateProfile(lastUsedProfileIndex,userObj); g_application.SetOfflineMode(false); m_jobHandler->SetIsConnectedToServer(true); g_infoManager.LoginAfterConnectionRestoreWasDone(); g_settings.m_vecProfiles[g_settings.m_iLastLoadedProfileIndex].setDate(); g_settings.SaveProfiles(PROFILES_FILE); if (getenv("BX_COUNTRY_CODE")) { g_application.SetCountryCode(getenv("BX_COUNTRY_CODE")); } else { BOXEE::BXObject obj; BOXEE::Boxee::GetInstance().GetCurrentUser(obj); std::string cc = obj.GetValue("country"); g_application.SetCountryCode(cc); } CWeather::GetInstance().Refresh(); #ifdef HAS_PYTHON g_pythonParser.m_bLogin = true; #endif CGUIMessage refreshHomeWinMsg(GUI_MSG_UPDATE, WINDOW_HOME, 0); g_windowManager.SendThreadMessage(refreshHomeWinMsg); return true; }