void ChangeDirThread::run() { if (!m_pUser) { gcException gce(ERR_NULLHANDLE, "User Core is null!"); onErrorEvent(gce); onCompleteEvent(); return; } UTIL::FS::recMakeFolder(m_szDest); if (!UTIL::FS::isValidFolder(m_szDest)) { gcException gce(ERR_BADPATH, "Could not create destination folder"); onErrorEvent(gce); onCompleteEvent(); return; } FileList vFileList; updateDb(vFileList); copyFiles(vFileList); if (!m_bStopped) { m_bCompleted = true; } onCompleteEvent(); }
void UninstallProcess::run() { if (m_szIPath == "" || m_szMCFPath == "") { gcException errPathNull(ERR_BADPATH, gcString("One of the paths for uninstall was nullptr [IP: {0} MCF: {1}].", m_szIPath, m_szMCFPath)); onErrorEvent(errPathNull); return; } MCFCore::MCFI *mcfHandle = mcfFactory(); m_pMcfHandle = mcfHandle; mcfHandle->getErrorEvent() += delegate(&onErrorEvent); mcfHandle->getProgEvent() += delegate(this, &UninstallProcess::onProgress); InstallScriptRunTime isrt(m_szInstallScript.c_str(), m_szIPath.c_str()); try { mcfHandle->setFile(m_szMCFPath.c_str()); mcfHandle->parseMCF(); isrt.run("PreUninstall"); mcfHandle->removeFiles(m_szIPath.c_str()); isrt.run("PostUninstall"); } catch (gcException &except) { onErrorEvent(except); } m_pMcfHandle=nullptr; mcfDelFactory(mcfHandle); onCompleteEvent(); }
void InstallCheckTask::doRun() { WildcardManager wildc = WildcardManager(); wildc.onNeedSpecialEvent += delegate(&onNeedWCEvent); wildc.onNeedSpecialEvent += delegate(getUserCore()->getNeedWildCardEvent()); getUserCore()->getItemManager()->retrieveItemInfo(getItemId(), 0, &wildc); uint32 prog = 0; onCompleteEvent(prog); getItemHandle()->completeStage(false); }
void DownloadToolTask::finish() { if (!m_bStopped) { m_pTool->setExePath(m_Path.getFullPath().c_str()); onCompleteEvent(); } else { gcException e(ERR_USERCANCELED); onErrorEvent(e); UTIL::FS::delFile(m_Path); } }
void GetItemListThread::doRun() { m_szDbName = getCIBDb(getUserCore()->getAppDataPath()); tinyxml2::XMLDocument doc; getWebCore()->getInstalledItemList(doc); int ver = XML::processStatus(doc, "itemwizard"); tinyxml2::XMLElement *infoNode = doc.FirstChildElement("itemwizard"); if (!infoNode) throw gcException(ERR_BADXML); if (isStopped()) return; WildcardManager wMng = WildcardManager(); if (ver == 1) parseItems1(infoNode, &wMng); else parseItems2(infoNode, &wMng); try { createCIPDbTables(getUserCore()->getAppDataPath()); sqlite3x::sqlite3_connection db(m_szDbName.c_str()); sqlite3x::sqlite3_command cmd(db, "REPLACE INTO cipiteminfo (internalid, name) VALUES (?,?);"); for (size_t x=0; x<m_vGameList.size(); x++) { cmd.bind(1, (long long int)m_vGameList[x].getId().toInt64()); cmd.bind(2, std::string(m_vGameList[x].getName()) ); cmd.executenonquery(); } } catch (std::exception &e) { Warning(gcString("Failed to update cip item list: {0}\n", e.what())); } uint32 prog=0; onCompleteEvent(prog); }
void GatherInfoThread::doRun() { auto wildc = gcRefPtr<WildcardManager>::create(); wildc->onNeedSpecialEvent += delegate(&onNeedWCEvent); uint32 prog = 0; onProgUpdateEvent(prog); getUserCore()->getItemManager()->retrieveItemInfo(getItemId(), 0, wildc, MCFBranch::BranchFromInt(getMcfBranch()), MCFBuild::BuildFromInt(getMcfBuild())); if (isStopped()) return; auto item = getItemInfo(); if (!item) throw gcException(ERR_INVALIDDATA, "The item handle was null (gather info failed)"); uint32 itemId = item->getId().getItem(); onCompleteEvent(itemId); }
void DownloadToolTask::onComplete() { bool notComplete = isStopped() || m_bCancelled; getUserCore()->getToolManager()->removeTransaction(m_ToolTTID, notComplete); m_ToolTTID = UINT_MAX; std::vector<DesuraId> toolList; getItemInfo()->getCurrentBranch()->getToolList(toolList); if (!m_bCancelled && !getUserCore()->getToolManager()->areAllToolsDownloaded(toolList)) { gcException e(ERR_INVALID, "Failed to download tools."); onErrorEvent(e); notComplete = true; } if (notComplete) { getItemHandle()->completeStage(true); return; } uint32 blank = 0; onCompleteEvent(blank); if (m_bInstallAfter) { getItemHandle()->goToStageInstallTools(m_bLaunch); } else { if (HasAllFlags(getItemInfo()->getStatus(), UserCore::Item::ItemInfoI::STATUS_INSTALLCOMPLEX)) getItemHandle()->goToStageInstallComplex(getMcfBranch(), getMcfBuild()); else getItemHandle()->goToStageInstall(m_szDownloadPath.c_str(), getMcfBranch()); } }
void CDKeyTask::doTask() { if (!getItemInfo() || !getWebCore()) { CDKeyEventInfo<gcException> cdei; cdei.task = this; cdei.t = gcException(ERR_NULLHANDLE, "Item info or web core are null"); cdei.id = getItemId(); onErrorEvent(cdei); return; } MCFBranch branch = getItemInfo()->getInstalledBranch(); try { gcString key = getWebCore()->getCDKey(getItemId(), branch); CDKeyEventInfo<gcString> cdei; cdei.task = this; cdei.t = key; cdei.id = getItemId(); onCompleteEvent(cdei); } catch (gcException &e) { CDKeyEventInfo<gcException> cdei; cdei.task = this; cdei.t = e; cdei.id = getItemId(); onErrorEvent(cdei); } }
void CDKProgress::onCDKeyComplete(DesuraId id, gcString &cdKey) { m_bOutstandingRequest = false; onCompleteEvent(cdKey); }
void UninstallAllThread::run() { if (!m_pUser) return; bool removeSimple = HasAnyFlags(m_iFlags, REMOVE_SIMPLE); bool removeCache = HasAnyFlags(m_iFlags, REMOVE_CACHE); bool removeSettings = HasAnyFlags(m_iFlags, REMOVE_SETTINGS); std::vector<UserCore::Item::ItemHandleI*> uninstallList; std::vector<UserCore::Item::ItemInfoI*> gamesList; m_pUser->getItemManager()->getGameList(gamesList); for (size_t x=0; x<gamesList.size(); x++) { UserCore::Item::ItemInfoI* game = gamesList[x]; std::vector<UserCore::Item::ItemInfoI*> modList; for (size_t y=0; y<modList.size(); y++) { if (modList[x]->isInstalled() && (modList[x]->isComplex() || removeSimple)) uninstallList.push_back(m_pUser->getItemManager()->findItemHandle(modList[x]->getId())); } if (removeSimple && game->isInstalled()) uninstallList.push_back(m_pUser->getItemManager()->findItemHandle(game->getId())); } { gcString str("{0}\n", Managers::GetString("#DUN_THREAD_UNINSTALL")); onLogEvent(str); } m_iTotal = uninstallList.size() + (removeCache?1:0) + (removeSettings?1:0) + 2; for (size_t x=0; x<uninstallList.size(); x++) { m_iTotalPos++; std::pair<uint32,uint32> pair(m_iTotalPos*100/m_iTotal, 0); onProgressEvent(pair); if (isStopped()) break; UserCore::Item::ItemHandleI* itemHandle = uninstallList[x]; if (!itemHandle) continue; gcString logStr("\t{0}\n", gcString(Managers::GetString("#DUN_THREAD_UNINSTALL_SUB"), itemHandle->getItemInfo()->getName())); onLogEvent(logStr); itemHandle->addHelper(this); itemHandle->uninstall(this, true, false); m_WaitCondition.wait(); itemHandle->delHelper(this); } m_pUser->logOut(); removeUninstallInfo(); removeGameExplorerInfo(); if (removeCache) removeDesuraCache(); if (removeSettings) removeDesuraSettings(); gcString finalLogStr("{0}\n", Managers::GetString("#DUN_THREAD_FINAL")); onLogEvent(finalLogStr); UTIL::WIN::delRegValue(APPID); UTIL::WIN::delRegValue(APPBUILD); UTIL::WIN::delRegValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Desura\\DesuraApp\\InstallPath"); UTIL::FS::Path path(UTIL::OS::getCommonProgramFilesPath(), L"", false); UTIL::FS::delFolder(path); UTIL::FS::delEmptyFolders(m_pUser->getAppDataPath()); UTIL::WIN::delRegKey("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Desura"); onCompleteEvent(); }