void InstallBranch::onChoice(wxCommandEvent& event) { MCFBranch b = getBranch(); if (b == UINT_MAX || b == (UINT_MAX - 1)) { if (b == UINT_MAX) m_butInstall->SetLabel(Managers::GetString(L"#PLAY")); else m_butInstall->SetLabel(Managers::GetString(L"#FIND")); m_butInstall->Enable(true); return; } UserCore::Item::ItemInfoI* pItemInfo = GetUserCore()->getItemManager()->findItemInfo(m_Item); if ((m_bIsMod || m_bIsExpansion) && !m_bSelectBranch) pItemInfo = GetUserCore()->getItemManager()->findItemInfo(pItemInfo->getParentId()); UserCore::Item::BranchInfoI* bi = pItemInfo->getBranchById(b); m_bBuy = (!(bi->getFlags()&UserCore::Item::BranchInfoI::BF_ONACCOUNT) && !(bi->getFlags()&UserCore::Item::BranchInfoI::BF_FREE)); if (m_bBuy) m_butInstall->SetLabel(Managers::GetString(L"#PURCHASE")); else m_butInstall->SetLabel(Managers::GetString(L"#INSTALL")); bool noRelease = HasAllFlags(bi->getFlags(), UserCore::Item::BranchInfoI::BF_NORELEASES); bool isPreorder = bi->isPreOrder(); bool onAccount = HasAllFlags(bi->getFlags(), UserCore::Item::BranchInfoI::BF_ONACCOUNT); m_butInstall->Enable(!(noRelease && isPreorder && onAccount)); }
uint32 GatherInfoTask::validate() { UserCore::Item::ItemInfoI* pItemInfo = getItemHandle()->getItemInfo(); uint32 isValid = 0; if (!pItemInfo) return UserCore::Item::Helper::V_BADINFO; DesuraId par = pItemInfo->getParentId(); UserCore::Item::ItemInfoI *parInfo = nullptr; if (par.isOk()) { parInfo = getUserCore()->getItemManager()->findItemInfo(par); if (!parInfo || !(parInfo->getStatus() & UserCore::Item::ItemInfoI::STATUS_INSTALLED)) isValid |= UserCore::Item::Helper::V_PARENT; } const char* path = pItemInfo->getPath(getMcfBranch()); if (!path) { isValid |= UserCore::Item::Helper::V_BADPATH; } else { const char *comAppPath = getUserCore()->getAppDataPath(); uint64 inFreeSpace = UTIL::OS::getFreeSpace(path); uint64 dlFreeSpace = UTIL::OS::getFreeSpace(comAppPath); //if they are on the same drive: if (strncmp(comAppPath, path, 3) == 0) { if ((inFreeSpace+dlFreeSpace) < (pItemInfo->getDownloadSize()+pItemInfo->getInstallSize())) { isValid |= (UserCore::Item::Helper::V_FREESPACE|UserCore::Item::Helper::V_FREESPACE_DL|UserCore::Item::Helper::V_FREESPACE_INS); } } else { if (dlFreeSpace < pItemInfo->getDownloadSize()) isValid |= UserCore::Item::Helper::V_FREESPACE|UserCore::Item::Helper::V_FREESPACE_DL; if (inFreeSpace < pItemInfo->getInstallSize()) isValid |= UserCore::Item::Helper::V_FREESPACE|UserCore::Item::Helper::V_FREESPACE_INS; } if (pItemInfo->getStatus() & UserCore::Item::ItemInfoI::STATUS_INSTALLCOMPLEX) { const char* primPath = pItemInfo->getInsPrimary(); if (primPath && strcmp(primPath, "") != 0 && UTIL::FS::isValidFolder(primPath) && !UTIL::FS::isFolderEmpty(primPath)) isValid |= UserCore::Item::Helper::V_NONEMPTY; } else if (pItemInfo->getStatus() & UserCore::Item::ItemInfoI::STATUS_DLC) { if (!parInfo || gcString(path) != gcString(parInfo->getPath())) { if (!UTIL::FS::isFolderEmpty(path)) isValid |= UserCore::Item::Helper::V_NONEMPTY; } } else if (!UTIL::FS::isFolderEmpty(path)) { isValid |= UserCore::Item::Helper::V_NONEMPTY; } } #ifdef NIX UserCore::Item::BranchInfoI* bi = pItemInfo->getBranchById(getMcfBranch()); std::vector<DesuraId> toolList; bi->getToolList(toolList); uint32 res = getUserCore()->getToolManager()->hasNonInstallableTool(toolList); switch (res) { case 0: isValid |= UserCore::Item::Helper::V_JAVA_SUN; break; case 1: isValid |= UserCore::Item::Helper::V_JAVA; break; case 2: isValid |= UserCore::Item::Helper::V_MONO; break; case 3: isValid |= UserCore::Item::Helper::V_AIR; break; }; #endif return isValid; }