void ExternalToolsPlugin::OnLaunchExternalTool(wxCommandEvent& e) { ExternalToolsData inData; m_mgr->GetConfigTool()->ReadObject(wxT("ExternalTools"), &inData); for (size_t i=0; i<inData.GetTools().size(); i++) { ToolInfo ti = inData.GetTools().at(i); if (wxXmlResource::GetXRCID(ti.GetId().c_str()) == e.GetId()) { DoLaunchTool(ti); } } }
void ToolManager::loadItems() { sqlite3x::sqlite3_connection db(getToolInfoDb(m_pUser->getAppDataPath()).c_str()); std::vector<DesuraId> toolIdList; try { sqlite3x::sqlite3_command cmd(db, "SELECT internalid FROM toolinfo;"); sqlite3x::sqlite3_reader reader = cmd.executereader(); while (reader.read()) { toolIdList.push_back(DesuraId(reader.getint64(0))); } } catch (std::exception &) { } for (size_t x=0; x<toolIdList.size(); x++) { ToolInfo* tool = findItem(toolIdList[x].toInt64()); bool bAdd = false; int32 negId = toolIdList[x].getItem(); if (!tool) { if (negId >= 0) tool = new ToolInfo(toolIdList[x]); #ifdef WIN32 else tool = NewJSToolInfo(toolIdList[x]); #endif bAdd = true; } else if (negId < m_iLastCustomToolId) { m_iLastCustomToolId = negId; } tool->loadFromDb(&db); if (bAdd) addItem(tool); } }
bool ToolTransInfo::startNextInstall(IPCToolMain* pToolMain, DesuraId &toolId) { if (m_uiCompleteCount == m_pTransaction->toolsList.size()) return false; toolId = m_pTransaction->toolsList[m_uiCompleteCount]; ToolInfo* info = m_pToolManager->findItem(toolId.toInt64()); if (!info) return true; if (info->isInstalled()) { m_uiCompleteCount++; return startNextInstall(pToolMain, toolId); } DesuraId id = info->getId(); m_pTransaction->onStartInstallEvent(id); gcException e = pToolMain->installTool(info); #ifdef NIX if (e.getErrId() == ERR_COMPLETED) { onINComplete(); return startNextInstall(pToolMain, toolId); } #endif if (e.getErrId() != WARN_OK && e.getErrId() != ERR_UNKNOWNERROR) { onINError(e); return false; } else { UserCore::Misc::ToolProgress prog; prog.done = m_uiCompleteCount; prog.total = m_pTransaction->toolsList.size(); prog.percent = prog.done*100/prog.total; m_pTransaction->onProgressEvent(prog); } return true; }
void ExternalToolsPlugin::DoLaunchTool(const ToolInfo& ti) { wxString command, working_dir; command << wxT("\"") << ti.GetPath() << wxT("\" ") << ti.GetArguments(); working_dir = ti.GetWd(); if (m_mgr->IsWorkspaceOpen()) { command = m_mgr->GetMacrosManager()->Expand(command, m_mgr, m_mgr->GetSolution()->GetActiveProjectName()); working_dir = m_mgr->GetMacrosManager()->Expand(working_dir, m_mgr, m_mgr->GetSolution()->GetActiveProjectName()); } // check to see if we require to save all files before continuing if (ti.GetSaveAllFiles() && !m_mgr->SaveAll()) return; if (ti.GetCaptureOutput() == false) { // change the directory to the requested working directory DirSaver ds; wxSetWorkingDirectory(working_dir); // apply environment EnvSetter envGuard(m_mgr->GetEnv()); wxExecute(command); } else { // create a piped process if (m_pipedProcess && m_pipedProcess->IsBusy()) { // a process is already running return; } m_pipedProcess = new AsyncExeCmd(m_mgr->GetOutputWindow()); DirSaver ds; EnvSetter envGuard(m_mgr->GetEnv()); wxSetWorkingDirectory(working_dir); // hide console if any, // redirect output m_pipedProcess->Execute(command, true, true); if (m_pipedProcess->GetProcess()) { m_pipedProcess->GetProcess()->Connect(wxEVT_END_PROCESS, wxProcessEventHandler(ExternalToolsPlugin::OnProcessEnd), NULL, this); } } }
ToolTransactionId ToolManager::installTools(Misc::ToolTransaction* transaction) { if (!areAllToolsValid(transaction->toolsList)) { safe_delete(transaction); return -1; } if (areAllToolsInstalled(transaction->toolsList)) { safe_delete(transaction); return -2; } Misc::ToolTransInfo* info = new Misc::ToolTransInfo(false, transaction, this); m_MapLock.lock(); ToolTransactionId ttid = m_uiLastTransId; m_uiLastTransId++; m_mTransactions[ttid] = info; m_MapLock.unlock(); std::vector<DesuraId> idList; info->getIds(idList); for (size_t x=0; x<idList.size(); x++) { DesuraId id = idList[x]; ToolInfo* tool = findItem(id.toInt64()); //This should not happen as there is a check before a install starts to make sure all tool ids are valid if (!tool) continue; if (tool->isInstalled()) info->removeItem(id); } startInstall(ttid); return ttid; }
void ToolManager::startDownload(Misc::ToolTransInfo* info) { if (!info) return; m_DownloadLock.lock(); std::vector<DesuraId> idList; info->getIds(idList); for (size_t x=0; x<idList.size(); x++) { DesuraId id = idList[x]; ToolInfo* tool = findItem(id.toInt64()); //This should not happen as there is a check before a download starts to make sure all tool ids are valid if (!tool) continue; #ifdef WIN32 tool->checkFile(m_pUser->getAppDataPath()); #endif if (tool->isDownloaded() || tool->isInstalled()) { info->removeItem(id); continue; } std::map<uint64, UserCore::Task::DownloadToolTask*>::iterator it = m_mDownloads.find(id.toInt64()); if (it == m_mDownloads.end()) downloadTool(tool); else it->second->increseRefCount(); } m_DownloadLock.unlock(); }
void ToolInstallThread::onINComplete(int32 &result) { m_bStillInstalling = false; ToolInfo* tool = m_pToolManager->findItem(m_CurrentInstallId.toInt64()); bool installError = false; if (tool) { installError = tool->checkExpectedResult(result) == false; if (!installError) tool->setInstalled(); } if (installError) { m_MapLock.lock(); std::map<ToolTransactionId, ToolTransInfo*>::iterator it = m_mTransactions.find(m_CurrentInstall); if (it != m_mTransactions.end() && hasToolMain()) { int32 r = result; Warning(gcString("The tool install [{2}] result didnt match what was expected [Actual: {0}, Expected: {1}]", r, tool->getResultString(), tool->getName())); gcException e(ERR_BADRESPONSE, gcString("The tool {0} failed to install (Bad result)", tool->getName())); it->second->onINError(e); m_CurrentInstall = -1; } m_MapLock.unlock(); } m_pToolManager->saveItems(); m_InstallWait.notify(); }
void ExternalToolDlg::SetTools(const std::vector<ToolInfo>& tools) { m_listCtrlTools->Freeze(); for(size_t i = 0; i < (size_t)m_listCtrlTools->GetItemCount(); i++) { ExternalToolData* data = (ExternalToolData*)m_listCtrlTools->GetItemData(i); wxDELETE(data); } m_listCtrlTools->DeleteAllItems(); for(size_t i = 0; i < tools.size(); i++) { ToolInfo ti = tools.at(i); long item = AppendListCtrlRow(m_listCtrlTools); ExternalToolData* data = new ExternalToolData(ti); m_listCtrlTools->SetItemPtrData(item, wxUIntPtr(data)); SetColumnText(m_listCtrlTools, item, 0, ti.GetId()); SetColumnText(m_listCtrlTools, item, 1, ti.GetName()); SetColumnText(m_listCtrlTools, item, 2, ti.GetPath()); } m_listCtrlTools->Thaw(); }
void ToolManager::parseXml(const XML::gcXMLElement &toolinfoNode) { if (!toolinfoNode.IsValid()) return; auto toolsNode = toolinfoNode.FirstChildElement("tools"); if (!toolsNode.IsValid()) return; WildcardManager wcm; wcm.onNeedInstallSpecialEvent += delegate(this, &ToolManager::onSpecialCheck); wcm.onNeedSpecialEvent += delegate(m_pUser->getNeedWildCardEvent()); auto wildcardNode = toolinfoNode.FirstChildElement("wcards"); if (wildcardNode.IsValid()) wcm.parseXML(wildcardNode); //clear the java path value WildcardInfo* temp = wcm.findItem("JAVA_EXE"); if (temp) { temp->m_szPath = ""; temp->m_bResolved = true; } bool is64OS = UTIL::OS::is64OS(); toolsNode.for_each_child("tool", [this, is64OS, &wcm](const XML::gcXMLElement &toolEl) { bool isTool64 = false; toolEl.GetChild("bit64", isTool64); if (isTool64 && !is64OS) return; const std::string id = toolEl.GetAtt("siteareaid"); if (id.empty()) return; DesuraId tid(id.c_str(), "tools"); ToolInfo* tool = this->findItem(tid.toInt64()); bool bAdd = false; if (!tool) { tool = new ToolInfo(tid); bAdd = true; } tool->parseXml(toolEl, &wcm, m_pUser->getAppDataPath()); if (bAdd) this->addItem(tool); }); postParseXml(); }
void HPersistence::LoadGameData(){ G::g_maxPower = getIntForKey("game_max_power", INIT_POWER); G::G_setCoin(getIntForKey("game_coin", INIT_COIN)); // G::g_mPower = getIntForKey("game_power", 7+45); if (G::g_mPower > G::g_maxPower) { G::g_last_power_recovery_time = G::G_getCurrentTime(); } G::G_setPower(getIntForKey("game_power", INIT_POWER)); G::G_setBook(getIntForKey("game_book", INIT_BOOK )); G::g_mIsBackgroundMusicOn = getBoolForKey("m_bgm", true); G::g_mIsEffectVolumeOn = getBoolForKey("m_soundEffect", true); G::g_stageInfos->removeAllObjects(); for(int i=0;i<MAX_STAGE;i++){ StageInfo* info; char key_IsOpen[30]; sprintf(key_IsOpen,"stage_%d_isopen",i); char key_IsPlay[30]; sprintf(key_IsPlay,"stage_%d_isplay",i); char key_Stars[30]; sprintf(key_Stars,"stage_%d_stars",i); bool isopen ; if(i==0){ isopen = getBoolForKey(key_IsOpen,true); }else{ isopen = getBoolForKey(key_IsOpen,false); } char key_IsShowed[30]; sprintf(key_IsShowed, "stage_%d_isShowed",i); bool isShowed = getBoolForKey(key_IsShowed,false); bool isplay = getBoolForKey(key_IsPlay,false); int stars = getIntForKey(key_Stars,0); // isopen = true; // stars = 3; // if (i<11) { // isopen = true; // stars = 3; // } info = new StageInfo(isopen,isplay,stars,isShowed); G::g_stageInfos->addObject(info); } G::g_toolinfos->removeAllObjects(); for (int i =0;i<MAX_TOOL_COUNT;i++) { ToolInfo* info = new ToolInfo(); IntToStringFormat(hold_key, "tool_hold_%d",i); info->setHoldCount(getIntForKey(hold_key, 1)); IntToStringFormat(show_key, "tool_new_showed_%d",i); info->new_showed = getBoolForKey(show_key, false); info->price = tool_prices[i]; G::g_toolinfos->addObject(info); } for(unsigned int i=0;i<G::g_achieve_infos->count();i++){ ACHIEVE_INFO* info = (ACHIEVE_INFO*)G::g_achieve_infos->objectAtIndex(i); char a_c_key[30]; sprintf(a_c_key, "achieve_c_%d",i); char a_s_key[30]; sprintf(a_s_key, "achieve_s_%d",i); info->complete = getIntForKey(a_c_key, 0); info->achieve_completed_showed = getBoolForKey(a_s_key, false); char show_key[30]; sprintf(show_key, "achieve_new_showed_%d",i); info->new_showed = getBoolForKey(show_key, false); IntToStringFormat(_time_key, "achieve_complete_time_%d", i) info->complete_time = getIntForKey(_time_key,0); IntToStringFormat(_complete_key, "achieve_is_complete_%d", i) info->is_complete = getBoolForKey(_complete_key, false); IntToStringFormat(_new_key, "achieve_isNew_%d", i) info->isNew = getBoolForKey(_new_key, true); } for(unsigned int i=0;i<G::g_help_infos.size();i++){ for (unsigned int j=0; j<G::g_help_infos[i].size(); j++) { char h_key[30]; sprintf(h_key,"help_info_%d_%d",i,j); G::g_help_infos[i][j]->isShowed = getBoolForKey(h_key,false); } // HELP_INFO* help_info = (HELP_INFO*)G::g_help_infos->objectAtIndex(i); // char h_key[30]; // sprintf(h_key,"help_info_%d",i); // help_info->isShowed = getBoolForKey(h_key,false); } G::g_hole_max_score = getIntForKey("unlimit_top_score", 0); G::g_hole_total_depth = getIntForKey("unlimit_total_dist", 0); G::tree_scroll_has_showed = getBoolForKey("tree_scroll_showed", false); G::g_last_power_recovery_time = getIntForKey("last_power_recovery_time",G::G_getCurrentTime()); for (int i=0; i<MAX_SHARE; i++) { char got_key[30]; sprintf(got_key, "share_reward_got_%d",i); G::g_share_reward_got[i]= getBoolForKey(got_key, false); } G::g_hole_isOpened = getBoolForKey("hole_opened",false); //G::g_hole_isOpened = true; G::g_hole_isNewShowed = getBoolForKey("hole_showed", false); G::g_sea_isOpened = getBoolForKey("sea_opened",false); // G::g_sea_isOpened = true; G::g_sea_isNewShowed = getBoolForKey("sea_showed", false); for (int i=0; i<MAX_BAO; i++) { BAO_INFO* info = new BAO_INFO(); info->id = i; IntToStringFormat(_getKey, "bao_isget_%d", i); IntToStringFormat(_showKey, "bao_show_%d", i); IntToStringFormat(_newKey, "bao_new_%d", i); info->isGot = getBoolForKey(_getKey, false); info->isShowed = getBoolForKey(_showKey, false); info->isNew = getBoolForKey(_newKey, true); G::g_bao_infos->addObject(info); } for (int i=0; i<MAX_CLOUD; i++) { IntToStringFormat(_cloudOpenKey, "cloud_open_%d", i); G::g_cloud_isOpened[i] = getBoolForKey(_cloudOpenKey, false); } G::g_has_first_saved = getBoolForKey("has_first_saved", false); long currentTime = G::G_getCurrentTime(); struct tm *ptm = localtime((time_t*)& currentTime); G::turntable_time = getIntForKey("turntable_time",ptm->tm_mday); G::turntable_count = getIntForKey("turntable_count", 1); if (ptm->tm_mday!=G::turntable_time) { G::turntable_count = 1; } G::turntable_time = ptm->tm_mday; CCLOG("turntable_time %ld",G::turntable_time); // if (G::turntable_count==0) { // long currentTime = G::G_getCurrentTime(); // struct tm *ptm1 = localtime((time_t*)& G::turntable_time); // struct tm *ptm2 = localtime((time_t*)& currentTime); // if (ptm1->tm_mday!=ptm2->tm_mday) { // G::turntable_count = 1; // } //// if (G::G_getCurrentTime()>G::turntable_time) { //// struct tm *ptm1 = localtime((time_t*)& G::turntable_time); //// struct tm *ptm2 = localtime((time_t*)& currentTime); //// if (ptm1->tm_mday!=ptm2->tm_mday) { //// G::turntable_count = 1; //// } //// } // } // // long currentTime = G::G_getCurrentTime(); // CCLOG("currentTime %ld",currentTime); // // // struct tm *ptm1 = localtime((time_t*)& G::turntable_time); // struct tm *ptm2 = localtime((time_t*)& currentTime); // CCLOG("tm_day1 %d tmp_day2 %d",ptm1->tm_mday,ptm2->tm_mday); // if (ptm1->tm_mday!=ptm2->tm_mday) { // G::turntable_count = 1; // } // G::turntable_time = G::G_getCurrentTime(); G::shop_th_has_buyed = getBoolForKey("shop_th_has_buyed", false); G::shop_ts_has_buyed = getBoolForKey("shop_ts_has_buyed", false); //G::turntable_count = 99; }
void HPersistence::SaveToFile(){ setIntForKey("game_max_power", G::g_maxPower); setIntForKey("game_coin", G::G_getCoin()); setIntForKey("game_power",G::G_getPower()); //setIntForKey("game_power",G::g_mPower); setIntForKey("game_book", G::G_getBook()); setBoolForKey("m_bgm", G::g_mIsBackgroundMusicOn); setBoolForKey("m_soundEffect", G::g_mIsEffectVolumeOn); //SaveStage(0); // for(int i=0;i<MAX_STAGE;i++){ // StageInfo* info = (StageInfo*)G::g_stageInfos->objectAtIndex(i); // if(info==NULL) // continue; // char key_IsOpen[30]; // sprintf(key_IsOpen,"stage_%d_isopen",i); // char key_IsPlay[30]; // sprintf(key_IsPlay,"stage_%d_isplay",i); // char key_Stars[30]; // sprintf(key_Stars,"stage_%d_stars",i); // setBoolForKey(key_IsOpen,info->isOpened); // setBoolForKey(key_IsPlay,info->isPlayed); // setIntForKey(key_Stars,info->stars); // char key_IsShowed[30]; // sprintf(key_IsShowed, "stage_%d_isShowed",i); // setBoolForKey(key_IsShowed,info->isShowed); // } for (int i =0;i<MAX_TOOL_COUNT;i++) { ToolInfo* info = (ToolInfo*)G::g_toolinfos->objectAtIndex(i); IntToStringFormat(hold_key, "tool_hold_%d",i); setIntForKey(hold_key, info->getHoldCount()); IntToStringFormat(show_key, "tool_new_showed_%d",i); setBoolForKey(show_key, info->new_showed); } for(unsigned int i=0;i<G::g_help_infos.size();i++){ for (unsigned int j=0; j<G::g_help_infos[i].size(); j++) { char h_key[30]; sprintf(h_key,"help_info_%d_%d",i,j); setBoolForKey(h_key,G::g_help_infos[i][j]->isShowed); } // HELP_INFO* help_info = (HELP_INFO*)G::g_help_infos->objectAtIndex(i); // char h_key[30]; // sprintf(h_key,"help_info_%d",i); // help_info->isShowed = getBoolForKey(h_key,false); } // int help_max_count = G::g_help_infos->count(); // for(int i=0;i<help_max_count;i++){ // HELP_INFO* help_info = (HELP_INFO*)G::g_help_infos->objectAtIndex(i); // char h_key[30]; // sprintf(h_key,"help_info_%d",i); // setBoolForKey(h_key,help_info->isShowed); // } for(unsigned int i=0;i<G::g_achieve_infos->count();i++){ ACHIEVE_INFO* info = (ACHIEVE_INFO*)G::g_achieve_infos->objectAtIndex(i); char a_c_key[30]; sprintf(a_c_key, "achieve_c_%d",i); char a_s_key[30]; sprintf(a_s_key, "achieve_s_%d",i); setIntForKey(a_c_key, info->complete); setBoolForKey(a_s_key, info->achieve_completed_showed); char show_key[30]; sprintf(show_key, "achieve_new_showed_%d",i); setBoolForKey(show_key, info->new_showed); IntToStringFormat(_time_key, "achieve_complete_time_%d", i) setIntForKey(_time_key, info->complete_time); IntToStringFormat(_complete_key, "achieve_is_complete_%d", i) setBoolForKey(_complete_key, info->is_complete); IntToStringFormat(_new_key, "achieve_isNew_%d", i) setBoolForKey(_new_key, info->isNew); } setIntForKey("unlimit_top_score", G::g_hole_max_score ); setIntForKey("unlimit_total_dist", G::g_hole_total_depth); setBoolForKey("tree_scroll_showed", G::tree_scroll_has_showed); setIntForKey("last_power_recovery_time", G::g_last_power_recovery_time); // for (int i=0; i<MAX_SHARE; i++) { // char got_key[30]; // sprintf(got_key, "share_reward_got_%d",i); // setBoolForKey(got_key, G::g_share_reward_got[i]); // } setBoolForKey("hole_opened", G::g_hole_isOpened); setBoolForKey("hole_showed", G::g_hole_isNewShowed); setBoolForKey("sea_opened", G::g_sea_isOpened); setBoolForKey("sea_showed", G::g_sea_isNewShowed); // for (unsigned int i=0; i<MAX_BAO; i++) { // BAO_INFO* info = (BAO_INFO*)G::g_bao_infos->objectAtIndex(i); // info->id = i; // IntToStringFormat(_getKey, "bao_isget_%d", i); // IntToStringFormat(_showKey, "bao_show_%d", i); // IntToStringFormat(_newKey, "bao_new_%d", i); // setBoolForKey(_getKey, info->isGot); // setBoolForKey(_showKey, info->isShowed ); // setBoolForKey(_newKey, info->isNew); // } for (int i=0; i<MAX_CLOUD; i++) { IntToStringFormat(_cloudOpenKey, "cloud_open_%d", i); setBoolForKey(_cloudOpenKey, G::g_cloud_isOpened[i]); } G::g_has_first_saved = true; setBoolForKey("has_first_saved", true); setIntForKey("turntable_time", G::turntable_time); setIntForKey("turntable_count", G::turntable_count); setBoolForKey("shop_th_has_buyed", G::shop_th_has_buyed); setBoolForKey("shop_ts_has_buyed", G::shop_ts_has_buyed); CCUserDefault::sharedUserDefault()->flush(); }
std::vector<ToolInfo> ExternalToolDlg::GetTools() { std::vector<ToolInfo> tools; for(size_t i = 0; i < (size_t)m_listCtrlTools->GetItemCount(); i++) { ToolInfo ti; ExternalToolData* data = (ExternalToolData*)m_listCtrlTools->GetItemData(i); if(data) { ti.SetId(data->m_id); ti.SetName(data->m_name); ti.SetPath(data->m_path); ti.SetArguments(data->m_args); ti.SetWd(data->m_workingDirectory); ti.SetIcon16(data->m_icon16); ti.SetIcon24(data->m_icon24); ti.SetCaptureOutput(data->m_captureOutput); ti.SetSaveAllFiles(data->m_saveAllFiles); ti.SetCallOnFileSave(data->m_callOnFileSave); tools.push_back(ti); } } return tools; }
void ToolManager::parseXml(tinyxml2::XMLNode* toolinfoNode) { if (!toolinfoNode) return; tinyxml2::XMLElement* toolsNode = toolinfoNode->FirstChildElement("tools"); if (!toolsNode) return; WildcardManager wcm; wcm.onNeedInstallSpecialEvent += delegate(this, &ToolManager::onSpecialCheck); wcm.onNeedSpecialEvent += delegate(m_pUser->getNeedWildCardEvent()); tinyxml2::XMLElement* wildcardNode = toolinfoNode->FirstChildElement("wcards"); if (wildcardNode) wcm.parseXML(wildcardNode); //clear the java path value WildcardInfo* temp = wcm.findItem("JAVA_EXE"); if (temp) { temp->m_szPath = ""; temp->m_bResolved = true; } bool is64OS = UTIL::OS::is64OS(); XML::for_each_child("tool", toolsNode, [this, is64OS, &wcm](tinyxml2::XMLElement* toolEl) { bool isTool64 = false; XML::GetChild("bit64", isTool64, toolEl); if (isTool64 && !is64OS) return; const char* id = toolEl->Attribute("siteareaid"); if (!id) return; DesuraId tid(id, "tools"); ToolInfo* tool = this->findItem(tid.toInt64()); bool bAdd = false; if (!tool) { tool = new ToolInfo(tid); bAdd = true; } tool->parseXml(toolEl, &wcm, m_pUser->getAppDataPath()); if (bAdd) this->addItem(tool); }); postParseXml(); }
bool operator()(const ToolInfo &t1, const ToolInfo &t2) { return t1.GetName().CmpNoCase(t2.GetName()) > 0; }