void CModListView::installMods(QStringList archives) { QStringList modNames; for (QString archive : archives) { // get basename out of full file name // remove path remove extension QString modName = archive.section('/', -1, -1).section('.', 0, 0); modNames.push_back(modName); } QStringList modsToEnable; // disable mod(s), to properly recalculate dependencies, if changed for (QString mod : boost::adaptors::reverse(modNames)) { CModEntry entry = modModel->getMod(mod); if (entry.isInstalled()) { // enable mod if installed and enabled if (entry.isEnabled()) modsToEnable.push_back(mod); } else { // enable mod if m if (settings["launcher"]["enableInstalledMods"].Bool()) modsToEnable.push_back(mod); } } // uninstall old version of mod, if installed for (QString mod : boost::adaptors::reverse(modNames)) { if (modModel->getMod(mod).isInstalled()) manager->uninstallMod(mod); } for (int i=0; i<modNames.size(); i++) manager->installMod(modNames[i], archives[i]); for (QString mod : modsToEnable) manager->enableMod(mod); for (QString archive : archives) QFile::remove(archive); checkManagerErrors(); }
QString CModListView::genChangelogText(CModEntry &mod) { QString headerTemplate = "<p><span style=\" font-weight:600;\">%1: </span></p>"; QString entryBegin = "<p align=\"justify\"><ul>"; QString entryEnd = "</ul></p>"; QString entryLine = "<li>%1</li>"; //QString versionSeparator = "<hr/>"; QString result; QVariantMap changelog = mod.getValue("changelog").toMap(); QList<QString> versions = changelog.keys(); std::sort(versions.begin(), versions.end(), [](QString lesser, QString greater) { return !CModEntry::compareVersions(lesser, greater); }); for (auto & version : versions) { result += headerTemplate.arg(version); result += entryBegin; for (auto & line : changelog.value(version).toStringList()) result += entryLine.arg(line); result += entryEnd; } return result; }
QString CModListView::genModInfoText(CModEntry &mod) { QString prefix = "<p><span style=\" font-weight:600;\">%1: </span>"; // shared prefix QString lineTemplate = prefix + "%2</p>"; QString urlTemplate = prefix + "<a href=\"%2\">%3</a></p>"; QString textTemplate = prefix + "</p><p align=\"justify\">%2</p>"; QString listTemplate = "<p align=\"justify\">%1: %2</p>"; QString noteTemplate = "<p align=\"justify\">%1</p>"; QString result; result += replaceIfNotEmpty(mod.getValue("name"), lineTemplate.arg(tr("Mod name"))); result += replaceIfNotEmpty(mod.getValue("installedVersion"), lineTemplate.arg(tr("Installed version"))); result += replaceIfNotEmpty(mod.getValue("latestVersion"), lineTemplate.arg(tr("Latest version"))); if (mod.getValue("size").isValid()) result += replaceIfNotEmpty(CModEntry::sizeToString(mod.getValue("size").toDouble()), lineTemplate.arg(tr("Download size"))); result += replaceIfNotEmpty(mod.getValue("author"), lineTemplate.arg(tr("Authors"))); if (mod.getValue("licenseURL").isValid()) result += urlTemplate.arg(tr("License")).arg(mod.getValue("licenseURL").toString()).arg(mod.getValue("licenseName").toString()); if (mod.getValue("contact").isValid()) result += urlTemplate.arg(tr("Home")).arg(mod.getValue("contact").toString()).arg(mod.getValue("contact").toString()); result += replaceIfNotEmpty(mod.getValue("depends"), lineTemplate.arg(tr("Required mods"))); result += replaceIfNotEmpty(mod.getValue("conflicts"), lineTemplate.arg(tr("Conflicting mods"))); result += replaceIfNotEmpty(mod.getValue("description"), textTemplate.arg(tr("Description"))); result += "<p></p>"; // to get some empty space QString unknownDeps = tr("This mod can not be installed or enabled because following dependencies are not present"); QString blockingMods = tr("This mod can not be enabled because following mods are incompatible with this mod"); QString hasActiveDependentMods = tr("This mod can not be disabled because it is required to run following mods"); QString hasDependentMods = tr("This mod can not be uninstalled or updated because it is required to run following mods"); QString thisIsSubmod = tr("This is submod and it can not be installed or uninstalled separately from parent mod"); QString notes; notes += replaceIfNotEmpty(findInvalidDependencies(mod.getName()), listTemplate.arg(unknownDeps)); notes += replaceIfNotEmpty(findBlockingMods(mod.getName()), listTemplate.arg(blockingMods)); if (mod.isEnabled()) notes += replaceIfNotEmpty(findDependentMods(mod.getName(), true), listTemplate.arg(hasActiveDependentMods)); if (mod.isInstalled()) notes += replaceIfNotEmpty(findDependentMods(mod.getName(), false), listTemplate.arg(hasDependentMods)); if (mod.getName().contains('.')) notes += noteTemplate.arg(thisIsSubmod); if (notes.size()) result += textTemplate.arg(tr("Notes")).arg(notes); return result; }