Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}