diff options
author | Petr Mrázek <peterix@gmail.com> | 2015-04-12 22:50:52 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2015-04-13 00:53:59 +0200 |
commit | 4d8f068f9cc576c7d1fb19551cb2429282a7c449 (patch) | |
tree | a5f064cbee770aa04f563c19a9dde37c8416d9a6 /logic/minecraft | |
parent | 1f9dd45e498b812a4884ce8221f9ee8250f475df (diff) | |
download | MultiMC-4d8f068f9cc576c7d1fb19551cb2429282a7c449.tar MultiMC-4d8f068f9cc576c7d1fb19551cb2429282a7c449.tar.gz MultiMC-4d8f068f9cc576c7d1fb19551cb2429282a7c449.tar.lz MultiMC-4d8f068f9cc576c7d1fb19551cb2429282a7c449.tar.xz MultiMC-4d8f068f9cc576c7d1fb19551cb2429282a7c449.zip |
NOISSUE refactor and rearrange zip file utils
Diffstat (limited to 'logic/minecraft')
-rw-r--r-- | logic/minecraft/JarUtils.cpp | 158 | ||||
-rw-r--r-- | logic/minecraft/JarUtils.h | 18 | ||||
-rw-r--r-- | logic/minecraft/LegacyUpdate.cpp | 5 | ||||
-rw-r--r-- | logic/minecraft/OneSixInstance.cpp | 1 | ||||
-rw-r--r-- | logic/minecraft/OneSixUpdate.cpp | 4 |
5 files changed, 5 insertions, 181 deletions
diff --git a/logic/minecraft/JarUtils.cpp b/logic/minecraft/JarUtils.cpp deleted file mode 100644 index b8fb6f0d..00000000 --- a/logic/minecraft/JarUtils.cpp +++ /dev/null @@ -1,158 +0,0 @@ -#include "minecraft/JarUtils.h" -#include <quazip.h> -#include <quazipfile.h> -#include <JlCompress.h> -#include <QDebug> - -namespace JarUtils { - -bool mergeZipFiles(QuaZip *into, QFileInfo from, QSet<QString> &contained, - std::function<bool(QString)> filter) -{ - QuaZip modZip(from.filePath()); - modZip.open(QuaZip::mdUnzip); - - QuaZipFile fileInsideMod(&modZip); - QuaZipFile zipOutFile(into); - for (bool more = modZip.goToFirstFile(); more; more = modZip.goToNextFile()) - { - QString filename = modZip.getCurrentFileName(); - if (!filter(filename)) - { - qDebug() << "Skipping file " << filename << " from " - << from.fileName() << " - filtered"; - continue; - } - if (contained.contains(filename)) - { - qDebug() << "Skipping already contained file " << filename << " from " - << from.fileName(); - continue; - } - contained.insert(filename); - - if (!fileInsideMod.open(QIODevice::ReadOnly)) - { - qCritical() << "Failed to open " << filename << " from " << from.fileName(); - return false; - } - - QuaZipNewInfo info_out(fileInsideMod.getActualFileName()); - - if (!zipOutFile.open(QIODevice::WriteOnly, info_out)) - { - qCritical() << "Failed to open " << filename << " in the jar"; - fileInsideMod.close(); - return false; - } - if (!JlCompress::copyData(fileInsideMod, zipOutFile)) - { - zipOutFile.close(); - fileInsideMod.close(); - qCritical() << "Failed to copy data of " << filename << " into the jar"; - return false; - } - zipOutFile.close(); - fileInsideMod.close(); - } - return true; -} - -bool createModdedJar(QString sourceJarPath, QString targetJarPath, const QList<Mod>& mods) -{ - QuaZip zipOut(targetJarPath); - if (!zipOut.open(QuaZip::mdCreate)) - { - QFile::remove(targetJarPath); - qCritical() << "Failed to open the minecraft.jar for modding"; - return false; - } - // Files already added to the jar. - // These files will be skipped. - QSet<QString> addedFiles; - - // Modify the jar - QListIterator<Mod> i(mods); - i.toBack(); - while (i.hasPrevious()) - { - const Mod &mod = i.previous(); - // do not merge disabled mods. - if (!mod.enabled()) - continue; - if (mod.type() == Mod::MOD_ZIPFILE) - { - if (!mergeZipFiles(&zipOut, mod.filename(), addedFiles, noFilter)) - { - zipOut.close(); - QFile::remove(targetJarPath); - qCritical() << "Failed to add" << mod.filename().fileName() << "to the jar."; - return false; - } - } - else if (mod.type() == Mod::MOD_SINGLEFILE) - { - auto filename = mod.filename(); - if (!JlCompress::compressFile(&zipOut, filename.absoluteFilePath(), - filename.fileName())) - { - zipOut.close(); - QFile::remove(targetJarPath); - qCritical() << "Failed to add" << mod.filename().fileName() << "to the jar."; - return false; - } - addedFiles.insert(filename.fileName()); - } - else if (mod.type() == Mod::MOD_FOLDER) - { - auto filename = mod.filename(); - QString what_to_zip = filename.absoluteFilePath(); - QDir dir(what_to_zip); - dir.cdUp(); - QString parent_dir = dir.absolutePath(); - if (!JlCompress::compressSubDir(&zipOut, what_to_zip, parent_dir, true, addedFiles)) - { - zipOut.close(); - QFile::remove(targetJarPath); - qCritical() << "Failed to add" << mod.filename().fileName() << "to the jar."; - return false; - } - qDebug() << "Adding folder " << filename.fileName() << " from " - << filename.absoluteFilePath(); - } - } - - if (!mergeZipFiles(&zipOut, QFileInfo(sourceJarPath), addedFiles, metaInfFilter)) - { - zipOut.close(); - QFile::remove(targetJarPath); - qCritical() << "Failed to insert minecraft.jar contents."; - return false; - } - - // Recompress the jar - zipOut.close(); - if (zipOut.getZipError() != 0) - { - QFile::remove(targetJarPath); - qCritical() << "Failed to finalize minecraft.jar!"; - return false; - } - return true; -} - -bool noFilter(QString) -{ - return true; -} - -bool metaInfFilter(QString key) -{ - if(key.contains("META-INF")) - { - return false; - } - return true; -} - -} diff --git a/logic/minecraft/JarUtils.h b/logic/minecraft/JarUtils.h deleted file mode 100644 index 2e8bd2a7..00000000 --- a/logic/minecraft/JarUtils.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once -#include <QString> -#include <QFileInfo> -#include <QSet> -#include "Mod.h" -#include <functional> - -class QuaZip; -namespace JarUtils -{ - bool noFilter(QString); - bool metaInfFilter(QString key); - - bool mergeZipFiles(QuaZip *into, QFileInfo from, QSet<QString> &contained, - std::function<bool(QString)> filter); - - bool createModdedJar(QString sourceJarPath, QString targetJarPath, const QList<Mod>& mods); -} diff --git a/logic/minecraft/LegacyUpdate.cpp b/logic/minecraft/LegacyUpdate.cpp index e2fffbb3..6c0a4cdf 100644 --- a/logic/minecraft/LegacyUpdate.cpp +++ b/logic/minecraft/LegacyUpdate.cpp @@ -17,14 +17,13 @@ #include <pathutils.h> #include <quazip.h> #include <quazipfile.h> -#include <JlCompress.h> #include <QDebug> #include "Env.h" #include "BaseInstance.h" #include "net/URLConstants.h" +#include "MMCZip.h" -#include "minecraft/JarUtils.h" #include "minecraft/LegacyUpdate.h" #include "minecraft/LwjglVersionList.h" #include "minecraft/MinecraftVersionList.h" @@ -455,7 +454,7 @@ void LegacyUpdate::ModTheJar() QString outputJarPath = runnableJar.filePath(); QString inputJarPath = baseJar.filePath(); - if(!JarUtils::createModdedJar(inputJarPath, outputJarPath, modList)) + if(!MMCZip::createModdedJar(inputJarPath, outputJarPath, modList)) { emitFailed(tr("Failed to create the custom Minecraft jar file.")); return; diff --git a/logic/minecraft/OneSixInstance.cpp b/logic/minecraft/OneSixInstance.cpp index 7a29c4b4..e9989f2e 100644 --- a/logic/minecraft/OneSixInstance.cpp +++ b/logic/minecraft/OneSixInstance.cpp @@ -25,6 +25,7 @@ #include "minecraft/VersionBuildError.h" #include "minecraft/MinecraftProcess.h" #include "minecraft/OneSixProfileStrategy.h" +#include "MMCZip.h" #include "minecraft/AssetsUtils.h" #include "icons/IconList.h" diff --git a/logic/minecraft/OneSixUpdate.cpp b/logic/minecraft/OneSixUpdate.cpp index 6cea2341..8a7a1f66 100644 --- a/logic/minecraft/OneSixUpdate.cpp +++ b/logic/minecraft/OneSixUpdate.cpp @@ -33,7 +33,7 @@ #include "forge/ForgeMirrors.h" #include "net/URLConstants.h" #include "minecraft/AssetsUtils.h" -#include "minecraft/JarUtils.h" +#include "MMCZip.h" OneSixUpdate::OneSixUpdate(OneSixInstance *inst, QObject *parent) : Task(parent), m_inst(inst) { @@ -320,7 +320,7 @@ void OneSixUpdate::jarlibFinished() auto metacache = ENV.metacache(); auto entry = metacache->resolveEntry("versions", localPath); QString fullJarPath = entry->getFullPath(); - if(!JarUtils::createModdedJar(sourceJarPath, finalJarPath, jarMods)) + if(!MMCZip::createModdedJar(sourceJarPath, finalJarPath, jarMods)) { emitFailed(tr("Failed to create the custom Minecraft jar file.")); return; |