diff options
author | Petr Mrázek <peterix@gmail.com> | 2017-03-19 23:58:54 +0100 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2017-04-07 00:20:02 +0200 |
commit | f557c1367994a61935fa0e8d0b1b67688d2692d0 (patch) | |
tree | 8eff9809b158cd1e65ba0eadc2b1c140b78c4e8b /api/logic/minecraft | |
parent | 2660418d58efb33cd3a0ab8ed9d48c359c076905 (diff) | |
download | PrismLauncher-f557c1367994a61935fa0e8d0b1b67688d2692d0.tar.gz PrismLauncher-f557c1367994a61935fa0e8d0b1b67688d2692d0.tar.bz2 PrismLauncher-f557c1367994a61935fa0e8d0b1b67688d2692d0.zip |
NOISSUE stuff and things happened. Maybe.
Diffstat (limited to 'api/logic/minecraft')
-rw-r--r-- | api/logic/minecraft/MinecraftInstance.cpp | 4 | ||||
-rw-r--r-- | api/logic/minecraft/MojangVersionFormat.cpp | 2 | ||||
-rw-r--r-- | api/logic/minecraft/ProfilePatch.h | 2 | ||||
-rw-r--r-- | api/logic/minecraft/ProfileUtils.cpp | 2 | ||||
-rw-r--r-- | api/logic/minecraft/VersionFile.cpp | 9 | ||||
-rw-r--r-- | api/logic/minecraft/VersionFile.h | 17 | ||||
-rw-r--r-- | api/logic/minecraft/ftb/FTBProfileStrategy.cpp | 4 | ||||
-rw-r--r-- | api/logic/minecraft/legacy/LwjglVersionList.cpp | 5 | ||||
-rw-r--r-- | api/logic/minecraft/legacy/LwjglVersionList.h | 4 | ||||
-rw-r--r-- | api/logic/minecraft/onesix/OneSixProfileStrategy.cpp | 130 | ||||
-rw-r--r-- | api/logic/minecraft/onesix/OneSixVersionFormat.cpp | 20 |
11 files changed, 152 insertions, 47 deletions
diff --git a/api/logic/minecraft/MinecraftInstance.cpp b/api/logic/minecraft/MinecraftInstance.cpp index b88d0c2a..cb080bfe 100644 --- a/api/logic/minecraft/MinecraftInstance.cpp +++ b/api/logic/minecraft/MinecraftInstance.cpp @@ -20,6 +20,8 @@ #include "minecraft/launch/ModMinecraftJar.h" #include "minecraft/launch/ClaimAccount.h" #include "java/launch/CheckJava.h" +#include <meta/Index.h> +#include <meta/VersionList.h> #include <icons/IIconList.h> @@ -105,7 +107,7 @@ QString MinecraftInstance::binRoot() const std::shared_ptr< BaseVersionList > MinecraftInstance::versionList() const { - return ENV.getVersionList("net.minecraft"); + return ENV.metadataIndex()->get("net.minecraft"); } QStringList MinecraftInstance::javaArguments() const diff --git a/api/logic/minecraft/MojangVersionFormat.cpp b/api/logic/minecraft/MojangVersionFormat.cpp index 1312421f..651e2fbc 100644 --- a/api/logic/minecraft/MojangVersionFormat.cpp +++ b/api/logic/minecraft/MojangVersionFormat.cpp @@ -210,7 +210,7 @@ VersionFilePtr MojangVersionFormat::versionFileFromJson(const QJsonDocument &doc readVersionProperties(root, out.get()); out->name = "Minecraft"; - out->fileId = "net.minecraft"; + out->uid = "net.minecraft"; out->version = out->minecraftVersion; out->filename = filename; diff --git a/api/logic/minecraft/ProfilePatch.h b/api/logic/minecraft/ProfilePatch.h index b61fb8b3..6f63f3c4 100644 --- a/api/logic/minecraft/ProfilePatch.h +++ b/api/logic/minecraft/ProfilePatch.h @@ -51,8 +51,6 @@ public: virtual void applyTo(MinecraftProfile *profile) = 0; virtual bool isMinecraftVersion() = 0; - virtual bool hasJarMods() = 0; - virtual QList<JarmodPtr> getJarMods() = 0; virtual bool isMoveable() = 0; virtual bool isCustomizable() = 0; diff --git a/api/logic/minecraft/ProfileUtils.cpp b/api/logic/minecraft/ProfileUtils.cpp index ef9b3b28..c7c56dd6 100644 --- a/api/logic/minecraft/ProfileUtils.cpp +++ b/api/logic/minecraft/ProfileUtils.cpp @@ -102,7 +102,7 @@ bool readOverrideOrders(QString path, PatchOrder &order) static VersionFilePtr createErrorVersionFile(QString fileId, QString filepath, QString error) { auto outError = std::make_shared<VersionFile>(); - outError->fileId = outError->name = fileId; + outError->uid = outError->name = fileId; outError->filename = filepath; outError->addProblem(PROBLEM_ERROR, error); return outError; diff --git a/api/logic/minecraft/VersionFile.cpp b/api/logic/minecraft/VersionFile.cpp index 573c4cb4..17dc6a49 100644 --- a/api/logic/minecraft/VersionFile.cpp +++ b/api/logic/minecraft/VersionFile.cpp @@ -14,12 +14,7 @@ bool VersionFile::isMinecraftVersion() { - return fileId == "net.minecraft"; -} - -bool VersionFile::hasJarMods() -{ - return !jarMods.isEmpty(); + return uid == "net.minecraft"; } void VersionFile::applyTo(MinecraftProfile *profile) @@ -29,7 +24,7 @@ void VersionFile::applyTo(MinecraftProfile *profile) { if (QRegExp(dependsOnMinecraftVersion, Qt::CaseInsensitive, QRegExp::Wildcard).indexIn(theirVersion) == -1) { - throw MinecraftVersionMismatch(fileId, dependsOnMinecraftVersion, theirVersion); + throw MinecraftVersionMismatch(uid, dependsOnMinecraftVersion, theirVersion); } } profile->applyMinecraftVersion(minecraftVersion); diff --git a/api/logic/minecraft/VersionFile.h b/api/logic/minecraft/VersionFile.h index 249d0965..6a922d74 100644 --- a/api/logic/minecraft/VersionFile.h +++ b/api/logic/minecraft/VersionFile.h @@ -25,7 +25,6 @@ class VersionFile : public ProfilePatch public: /* methods */ virtual void applyTo(MinecraftProfile *profile) override; virtual bool isMinecraftVersion() override; - virtual bool hasJarMods() override; virtual int getOrder() override { return order; @@ -34,13 +33,9 @@ public: /* methods */ { this->order = order; } - virtual QList<JarmodPtr> getJarMods() override - { - return jarMods; - } virtual QString getID() override { - return fileId; + return uid; } virtual QString getName() override { @@ -120,9 +115,6 @@ public: /* methods */ public: /* data */ - /// MultiMC: order hint for this version file if no explicit order is set - int order = 0; - // Flags for UI and version file manipulation in general bool m_isVanilla = false; bool m_isRemovable = false; @@ -130,6 +122,9 @@ public: /* data */ bool m_isCustomizable = false; bool m_isMovable = false; + /// MultiMC: order hint for this version file if no explicit order is set + int order = 0; + /// MultiMC: filename of the file this was loaded from QString filename; @@ -137,7 +132,7 @@ public: /* data */ QString name; /// MultiMC: package ID of this package - QString fileId; + QString uid; /// MultiMC: version of this package QString version; @@ -191,5 +186,3 @@ public: // Mojang: extended asset index download information std::shared_ptr<MojangAssetIndexInfo> mojangAssetIndex; }; - - diff --git a/api/logic/minecraft/ftb/FTBProfileStrategy.cpp b/api/logic/minecraft/ftb/FTBProfileStrategy.cpp index 92a1555a..45765cd4 100644 --- a/api/logic/minecraft/ftb/FTBProfileStrategy.cpp +++ b/api/logic/minecraft/ftb/FTBProfileStrategy.cpp @@ -27,7 +27,7 @@ void FTBProfileStrategy::loadDefaultBuiltinPatches() if(QFile::exists(mcJson)) { auto file = ProfileUtils::parseJsonFile(QFileInfo(mcJson), false); - file->fileId = "net.minecraft"; + file->uid = "net.minecraft"; file->name = QObject::tr("Minecraft (tracked)"); file->setVanilla(true); if(file->version.isEmpty()) @@ -64,7 +64,7 @@ void FTBProfileStrategy::loadDefaultBuiltinPatches() addLib->setHint("local"); addLib->setStoragePrefix(nativeInstance->librariesPath().absolutePath()); } - file->fileId = "org.multimc.ftb.pack"; + file->uid = "org.multimc.ftb.pack"; file->setVanilla(true); file->name = QObject::tr("%1 (FTB pack)").arg(m_instance->name()); if(file->version.isEmpty()) diff --git a/api/logic/minecraft/legacy/LwjglVersionList.cpp b/api/logic/minecraft/legacy/LwjglVersionList.cpp index 7f4e7b38..3d7ad2d4 100644 --- a/api/logic/minecraft/legacy/LwjglVersionList.cpp +++ b/api/logic/minecraft/legacy/LwjglVersionList.cpp @@ -99,6 +99,7 @@ inline QDomElement getDomElementByTagName(QDomElement parent, QString tagname) void LWJGLVersionList::rssFailed(const QString& reason) { + m_rssDLJob.reset(); m_loading = false; qWarning() << "Failed to load LWJGL list. Network error: " + reason; } @@ -116,8 +117,9 @@ void LWJGLVersionList::rssSucceeded() if (!doc.setContent(m_rssData, false, &xmlErrorMsg, &errorLine)) { qWarning() << "Failed to load LWJGL list. XML error: " + xmlErrorMsg + " at line " + QString::number(errorLine); - m_loading = false; + m_rssDLJob.reset(); m_rssData.clear(); + m_loading = false; return; } m_rssData.clear(); @@ -162,5 +164,6 @@ void LWJGLVersionList::rssSucceeded() endResetModel(); qDebug() << "Loaded LWJGL list."; + m_rssDLJob.reset(); m_loading = false; } diff --git a/api/logic/minecraft/legacy/LwjglVersionList.h b/api/logic/minecraft/legacy/LwjglVersionList.h index 652a3fda..f5312e2c 100644 --- a/api/logic/minecraft/legacy/LwjglVersionList.h +++ b/api/logic/minecraft/legacy/LwjglVersionList.h @@ -78,9 +78,9 @@ public: return m_vlist[i]; } - virtual Task* getLoadTask() override + virtual shared_qobject_ptr<Task> getLoadTask() override { - return nullptr; + return m_rssDLJob; } virtual void sortVersions() override {}; diff --git a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp index b19a2dea..3a9b10e6 100644 --- a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp +++ b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp @@ -56,7 +56,7 @@ void OneSixProfileStrategy::upgradeDeprecatedFiles() } auto file = ProfileUtils::parseJsonFile(QFileInfo(sourceFile), false); ProfileUtils::removeLwjglFromPatch(file); - file->fileId = "net.minecraft"; + file->uid = "net.minecraft"; file->version = file->minecraftVersion; file->name = "Minecraft"; auto data = OneSixVersionFormat::versionFileToJson(file, false).toJson(); @@ -81,6 +81,107 @@ void OneSixProfileStrategy::upgradeDeprecatedFiles() } } +class MetaPatchProvider : public ProfilePatch +{ +public: /* con/des */ + MetaPatchProvider(std::shared_ptr<Meta::Version> data) + :m_version(data) + { + } +public: + QString getFilename() override + { + return QString(); + } + QString getID() override + { + return m_version->uid(); + } + QString getName() override + { + auto vfile = getFile(); + if(vfile) + { + return vfile->getName(); + } + return m_version->name(); + } + QDateTime getReleaseDateTime() override + { + return m_version->time(); + } + QString getVersion() override + { + return m_version->version(); + } + std::shared_ptr<class VersionFile> getVersionFile() override + { + return m_version->data(); + } + void setOrder(int) override + { + } + int getOrder() override + { + return 0; + } + VersionSource getVersionSource() override + { + return VersionSource::Local; + } + bool isVersionChangeable() override + { + return true; + } + bool isRevertible() override + { + return false; + } + bool isRemovable() override + { + return true; + } + bool isCustom() override + { + return false; + } + bool isCustomizable() override + { + return true; + } + bool isMoveable() override + { + return true; + } + bool isEditable() override + { + return false; + } + bool isMinecraftVersion() override + { + return getID() == "net.minecraft"; + } + void applyTo(MinecraftProfile * profile) override + { + auto vfile = getFile(); + if(vfile) + { + vfile->applyTo(profile); + } + } +private: + VersionFilePtr getFile() + { + if(!m_version->isLoaded()) + { + m_version->load(); + } + return m_version->data(); + } +private: + std::shared_ptr<Meta::Version> m_version; +}; + void OneSixProfileStrategy::loadDefaultBuiltinPatches() { { @@ -101,7 +202,7 @@ void OneSixProfileStrategy::loadDefaultBuiltinPatches() else { auto mcversion = ENV.metadataIndex()->get("net.minecraft", m_instance->intendedVersionId()); - minecraftPatch = std::dynamic_pointer_cast<ProfilePatch>(mcversion); + minecraftPatch = std::make_shared<MetaPatchProvider>(mcversion); } if (!minecraftPatch) { @@ -124,7 +225,7 @@ void OneSixProfileStrategy::loadDefaultBuiltinPatches() else { auto lwjglversion = ENV.metadataIndex()->get("org.lwjgl", "2.9.1"); - lwjglPatch = std::dynamic_pointer_cast<ProfilePatch>(lwjglversion); + lwjglPatch = std::make_shared<MetaPatchProvider>(lwjglversion); } if (!lwjglPatch) { @@ -162,10 +263,10 @@ void OneSixProfileStrategy::loadUserPatches() qDebug() << "Reading" << filename << "by user order"; VersionFilePtr file = ProfileUtils::parseJsonFile(finfo, false); // sanity check. prevent tampering with files. - if (file->fileId != id) + if (file->uid != id) { - file->addProblem(PROBLEM_WARNING, QObject::tr("load id %1 does not match internal id %2").arg(id, file->fileId)); - seen_extra.insert(file->fileId); + file->addProblem(PROBLEM_WARNING, QObject::tr("load id %1 does not match internal id %2").arg(id, file->uid)); + seen_extra.insert(file->uid); } file->setRemovable(true); file->setMovable(true); @@ -185,15 +286,15 @@ void OneSixProfileStrategy::loadUserPatches() qDebug() << "Reading" << info.fileName(); auto file = ProfileUtils::parseJsonFile(info, true); // ignore builtins - if (file->fileId == "net.minecraft") + if (file->uid == "net.minecraft") continue; - if (file->fileId == "org.lwjgl") + if (file->uid == "org.lwjgl") continue; // do not load versions with broken IDs twice - if(seen_extra.contains(file->fileId)) + if(seen_extra.contains(file->uid)) continue; // do not load what we already loaded in the first pass - if (userOrder.contains(file->fileId)) + if (userOrder.contains(file->uid)) continue; file->setRemovable(true); file->setMovable(true); @@ -203,7 +304,7 @@ void OneSixProfileStrategy::loadUserPatches() file->assets = QString(); file->mojangAssetIndex.reset(); // HACK - files.insert(file->order, file); + files.insert(file->getOrder(), file); } QSet<int> seen; for (auto order : files.keys()) @@ -284,7 +385,8 @@ bool OneSixProfileStrategy::removePatch(ProfilePatchPtr patch) return true; }; - for(auto &jarmod: patch->getJarMods()) + auto &jarMods = patch->getVersionFile()->jarMods; + for(auto &jarmod: jarMods) { ok &= preRemoveJarMod(jarmod); } @@ -404,8 +506,8 @@ bool OneSixProfileStrategy::installJarMods(QStringList filepaths) jarMod->originalName = sourceInfo.completeBaseName(); f->jarMods.append(jarMod); f->name = target_name; - f->fileId = target_id; - f->order = profile->getFreeOrderNumber(); + f->uid = target_id; + f->setOrder(profile->getFreeOrderNumber()); QString patchFileName = FS::PathCombine(patchDir, target_id + ".json"); f->filename = patchFileName; f->setMovable(true); diff --git a/api/logic/minecraft/onesix/OneSixVersionFormat.cpp b/api/logic/minecraft/onesix/OneSixVersionFormat.cpp index 403eb112..944e68a4 100644 --- a/api/logic/minecraft/onesix/OneSixVersionFormat.cpp +++ b/api/logic/minecraft/onesix/OneSixVersionFormat.cpp @@ -51,7 +51,7 @@ VersionFilePtr OneSixVersionFormat::versionFileFromJson(const QJsonDocument &doc { if (root.contains("order")) { - out->order = requireInteger(root.value("order")); + out->setOrder(requireInteger(root.value("order"))); } else { @@ -61,7 +61,16 @@ VersionFilePtr OneSixVersionFormat::versionFileFromJson(const QJsonDocument &doc } out->name = root.value("name").toString(); - out->fileId = root.value("fileId").toString(); + + if(root.contains("uid")) + { + out->uid = root.value("uid").toString(); + } + else + { + out->uid = root.value("fileId").toString(); + } + out->version = root.value("version").toString(); out->dependsOnMinecraftVersion = root.value("mcVersion").toString(); out->filename = filename; @@ -161,10 +170,13 @@ QJsonDocument OneSixVersionFormat::versionFileToJson(const VersionFilePtr &patch QJsonObject root; if (saveOrder) { - root.insert("order", patch->order); + root.insert("order", patch->getOrder()); } writeString(root, "name", patch->name); - writeString(root, "fileId", patch->fileId); + + writeString(root, "uid", patch->uid); + writeString(root, "fileId", patch->uid); + writeString(root, "version", patch->version); writeString(root, "mcVersion", patch->dependsOnMinecraftVersion); |