summaryrefslogtreecommitdiffstats
path: root/logic/minecraft
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2015-04-12 22:50:52 +0200
committerPetr Mrázek <peterix@gmail.com>2015-04-13 00:53:59 +0200
commit4d8f068f9cc576c7d1fb19551cb2429282a7c449 (patch)
treea5f064cbee770aa04f563c19a9dde37c8416d9a6 /logic/minecraft
parent1f9dd45e498b812a4884ce8221f9ee8250f475df (diff)
downloadMultiMC-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.cpp158
-rw-r--r--logic/minecraft/JarUtils.h18
-rw-r--r--logic/minecraft/LegacyUpdate.cpp5
-rw-r--r--logic/minecraft/OneSixInstance.cpp1
-rw-r--r--logic/minecraft/OneSixUpdate.cpp4
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;