diff options
Diffstat (limited to 'logic/Mod.cpp')
-rw-r--r-- | logic/Mod.cpp | 102 |
1 files changed, 52 insertions, 50 deletions
diff --git a/logic/Mod.cpp b/logic/Mod.cpp index 75e0a3a9..825e663f 100644 --- a/logic/Mod.cpp +++ b/logic/Mod.cpp @@ -1,12 +1,12 @@ -// +// // Copyright 2012 MultiMC Contributors -// +// // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -28,17 +28,17 @@ #include <inifile.h> #include <logger/QsLog.h> -Mod::Mod( const QFileInfo& file ) +Mod::Mod(const QFileInfo &file) { repath(file); } -void Mod::repath ( const QFileInfo& file ) +void Mod::repath(const QFileInfo &file) { m_file = file; m_name = file.completeBaseName(); m_id = file.fileName(); - + m_type = Mod::MOD_UNKNOWN; if (m_file.isDir()) m_type = MOD_FOLDER; @@ -50,19 +50,19 @@ void Mod::repath ( const QFileInfo& file ) else m_type = MOD_SINGLEFILE; } - if(m_type == MOD_ZIPFILE) + if (m_type == MOD_ZIPFILE) { QuaZip zip(m_file.filePath()); - if(!zip.open(QuaZip::mdUnzip)) + if (!zip.open(QuaZip::mdUnzip)) return; - + QuaZipFile file(&zip); - for(bool more=zip.goToFirstFile(); more; more=zip.goToNextFile()) + for (bool more = zip.goToFirstFile(); more; more = zip.goToNextFile()) { QString name = zip.getCurrentFileName(); - if(name == "mcmod.info") + if (name == "mcmod.info") { - if(!file.open(QIODevice::ReadOnly)) + if (!file.open(QIODevice::ReadOnly)) { zip.close(); return; @@ -72,9 +72,9 @@ void Mod::repath ( const QFileInfo& file ) zip.close(); return; } - else if(name == "forgeversion.properties") + else if (name == "forgeversion.properties") { - if(!file.open(QIODevice::ReadOnly)) + if (!file.open(QIODevice::ReadOnly)) { zip.close(); return; @@ -87,16 +87,16 @@ void Mod::repath ( const QFileInfo& file ) } zip.close(); } - else if(m_type == MOD_FOLDER) + else if (m_type == MOD_FOLDER) { QFileInfo mcmod_info(PathCombine(m_file.filePath(), "mcmod.info")); if (mcmod_info.isFile()) { QFile mcmod(mcmod_info.filePath()); - if(!mcmod.open(QIODevice::ReadOnly)) + if (!mcmod.open(QIODevice::ReadOnly)) return; auto data = mcmod.readAll(); - if(data.isEmpty() || data.isNull()) + if (data.isEmpty() || data.isNull()) return; ReadMCModInfo(data); } @@ -110,35 +110,37 @@ void Mod::repath ( const QFileInfo& file ) // https://github.com/MinecraftForge/FML/wiki/FML-mod-information-file/5bf6a2d05145ec79387acc0d45c958642fb049fc void Mod::ReadMCModInfo(QByteArray contents) { - auto getInfoFromArray = [&]( QJsonArray arr ) -> void + auto getInfoFromArray = [&](QJsonArray arr)->void { - if(!arr.at(0).isObject()) + if (!arr.at(0).isObject()) return; auto firstObj = arr.at(0).toObject(); m_id = firstObj.value("modid").toString(); m_name = firstObj.value("name").toString(); m_version = firstObj.value("version").toString(); + m_homeurl = firstObj.value("url").toString(); return; - }; + } + ; QJsonParseError jsonError; QJsonDocument jsonDoc = QJsonDocument::fromJson(contents, &jsonError); // this is the very old format that had just the array - if(jsonDoc.isArray()) + if (jsonDoc.isArray()) { getInfoFromArray(jsonDoc.array()); } - else if(jsonDoc.isObject()) + else if (jsonDoc.isObject()) { auto val = jsonDoc.object().value("modinfoversion"); int version = val.toDouble(); - if(version != 2) + if (version != 2) { QLOG_ERROR() << "BAD stuff happened to mod json:"; QLOG_ERROR() << contents; return; } auto arrVal = jsonDoc.object().value("modlist"); - if(arrVal.isArray()) + if (arrVal.isArray()) { getInfoFromArray(arrVal.toArray()); } @@ -150,33 +152,34 @@ void Mod::ReadForgeInfo(QByteArray contents) // Read the data m_name = "Minecraft Forge"; m_id = "Forge"; + m_homeurl = "http://www.minecraftforge.net/forum/"; INIFile ini; - if(!ini.loadFile(contents)) + if (!ini.loadFile(contents)) return; - - QString major = ini.get("forge.major.number","0").toString(); - QString minor = ini.get("forge.minor.number","0").toString(); - QString revision = ini.get("forge.revision.number","0").toString(); - QString build = ini.get("forge.build.number","0").toString(); - + + QString major = ini.get("forge.major.number", "0").toString(); + QString minor = ini.get("forge.minor.number", "0").toString(); + QString revision = ini.get("forge.revision.number", "0").toString(); + QString build = ini.get("forge.build.number", "0").toString(); + m_version = major + "." + minor + "." + revision + "." + build; } -bool Mod::replace ( Mod& with ) +bool Mod::replace(Mod &with) { - if(!destroy()) + if (!destroy()) return false; bool success = false; auto t = with.type(); - if(t == MOD_ZIPFILE || t == MOD_SINGLEFILE) + if (t == MOD_ZIPFILE || t == MOD_SINGLEFILE) { success = QFile::copy(with.m_file.filePath(), m_file.path()); } - if(t == MOD_FOLDER) + if (t == MOD_FOLDER) { success = copyPath(with.m_file.filePath(), m_file.path()); } - if(success) + if (success) { m_id = with.m_id; m_mcversion = with.m_mcversion; @@ -189,10 +192,10 @@ bool Mod::replace ( Mod& with ) bool Mod::destroy() { - if(m_type == MOD_FOLDER) + if (m_type == MOD_FOLDER) { QDir d(m_file.filePath()); - if(d.removeRecursively()) + if (d.removeRecursively()) { m_type = MOD_UNKNOWN; return true; @@ -202,7 +205,7 @@ bool Mod::destroy() else if (m_type == MOD_SINGLEFILE || m_type == MOD_ZIPFILE) { QFile f(m_file.filePath()); - if(f.remove()) + if (f.remove()) { m_type = MOD_UNKNOWN; return true; @@ -212,18 +215,17 @@ bool Mod::destroy() return true; } - QString Mod::version() const { - switch(type()) + switch (type()) { - case MOD_ZIPFILE: - return m_version; - case MOD_FOLDER: - return "Folder"; - case MOD_SINGLEFILE: - return "File"; - default: - return "VOID"; + case MOD_ZIPFILE: + return m_version; + case MOD_FOLDER: + return "Folder"; + case MOD_SINGLEFILE: + return "File"; + default: + return "VOID"; } } |