refactor: initial migration to QuaZip 1.2
Let's move off our custom QuaZip. In the olden times we needed the custom version of QuaZip, as it was basically unmaintained and on SourceForge (eww). But nowadays it's maintained and on GitHub. See new GitHub page: https://github.com/stachenov/quazip
This commit is contained in:
parent
c39da093bf
commit
efa414c442
4
.gitmodules
vendored
4
.gitmodules
vendored
@ -2,7 +2,3 @@
|
|||||||
path = libraries/libnbtplusplus
|
path = libraries/libnbtplusplus
|
||||||
url = https://github.com/MultiMC/libnbtplusplus.git
|
url = https://github.com/MultiMC/libnbtplusplus.git
|
||||||
pushurl = git@github.com:MultiMC/libnbtplusplus.git
|
pushurl = git@github.com:MultiMC/libnbtplusplus.git
|
||||||
[submodule "libraries/quazip"]
|
|
||||||
path = libraries/quazip
|
|
||||||
url = https://github.com/PolyMC/quazip.git
|
|
||||||
pushurl = git@github.com:PolyMC/quazip.git
|
|
||||||
|
@ -103,6 +103,8 @@ find_package(Qt5Network REQUIRED)
|
|||||||
find_package(Qt5Test REQUIRED)
|
find_package(Qt5Test REQUIRED)
|
||||||
find_package(Qt5Xml REQUIRED)
|
find_package(Qt5Xml REQUIRED)
|
||||||
|
|
||||||
|
find_package(QuaZip-Qt5 REQUIRED)
|
||||||
|
|
||||||
# The Qt5 cmake files don't provide its install paths, so ask qmake.
|
# The Qt5 cmake files don't provide its install paths, so ask qmake.
|
||||||
include(QMakeQuery)
|
include(QMakeQuery)
|
||||||
query_qmake(QT_INSTALL_PLUGINS QT_PLUGINS_DIR)
|
query_qmake(QT_INSTALL_PLUGINS QT_PLUGINS_DIR)
|
||||||
@ -249,7 +251,6 @@ add_subdirectory(libraries/hoedown) # markdown parser
|
|||||||
add_subdirectory(libraries/launcher) # java based launcher part for Minecraft
|
add_subdirectory(libraries/launcher) # java based launcher part for Minecraft
|
||||||
add_subdirectory(libraries/javacheck) # java compatibility checker
|
add_subdirectory(libraries/javacheck) # java compatibility checker
|
||||||
add_subdirectory(libraries/xz-embedded) # xz compression
|
add_subdirectory(libraries/xz-embedded) # xz compression
|
||||||
add_subdirectory(libraries/quazip) # zip manipulation library
|
|
||||||
add_subdirectory(libraries/rainbow) # Qt extension for colors
|
add_subdirectory(libraries/rainbow) # Qt extension for colors
|
||||||
add_subdirectory(libraries/iconfix) # fork of Qt's QIcon loader
|
add_subdirectory(libraries/iconfix) # fork of Qt's QIcon loader
|
||||||
add_subdirectory(libraries/LocalPeer) # fork of a library from Qt solutions
|
add_subdirectory(libraries/LocalPeer) # fork of a library from Qt solutions
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
#include "modplatform/flame/FileResolvingTask.h"
|
#include "modplatform/flame/FileResolvingTask.h"
|
||||||
#include "modplatform/flame/PackManifest.h"
|
#include "modplatform/flame/PackManifest.h"
|
||||||
#include "Json.h"
|
#include "Json.h"
|
||||||
#include <quazipdir.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazipdir.h>
|
||||||
#include "modplatform/technic/TechnicPackProcessor.h"
|
#include "modplatform/technic/TechnicPackProcessor.h"
|
||||||
|
|
||||||
#include "icons/IconList.h"
|
#include "icons/IconList.h"
|
||||||
|
@ -13,17 +13,16 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <quazip.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazip.h>
|
||||||
#include <quazipdir.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazipdir.h>
|
||||||
#include <quazipfile.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazipfile.h>
|
||||||
#include <JlCompress.h>
|
|
||||||
#include "MMCZip.h"
|
#include "MMCZip.h"
|
||||||
#include "FileSystem.h"
|
#include "FileSystem.h"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
// ours
|
// ours
|
||||||
bool MMCZip::mergeZipFiles(QuaZip *into, QFileInfo from, QSet<QString> &contained, const JlCompress::FilterFunction filter)
|
bool MMCZip::mergeZipFiles(QuaZip *into, QFileInfo from, QSet<QString> &contained, const FilterFunction filter)
|
||||||
{
|
{
|
||||||
QuaZip modZip(from.filePath());
|
QuaZip modZip(from.filePath());
|
||||||
modZip.open(QuaZip::mdUnzip);
|
modZip.open(QuaZip::mdUnzip);
|
||||||
@ -74,99 +73,6 @@ bool MMCZip::mergeZipFiles(QuaZip *into, QFileInfo from, QSet<QString> &containe
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ours
|
|
||||||
bool MMCZip::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))
|
|
||||||
{
|
|
||||||
zipOut.close();
|
|
||||||
QFile::remove(targetJarPath);
|
|
||||||
qCritical() << "Failed to add" << mod.filename().fileName() << "to the jar.";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (mod.type() == Mod::MOD_SINGLEFILE)
|
|
||||||
{
|
|
||||||
// FIXME: buggy - does not work with addedFiles
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
// FIXME: buggy - does not work with addedFiles
|
|
||||||
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, 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();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Make sure we do not continue launching when something is missing or undefined...
|
|
||||||
zipOut.close();
|
|
||||||
QFile::remove(targetJarPath);
|
|
||||||
qCritical() << "Failed to add unknown mod type" << mod.filename().fileName() << "to the jar.";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mergeZipFiles(&zipOut, QFileInfo(sourceJarPath), addedFiles, [](const QString key){return !key.contains("META-INF");}))
|
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ours
|
// ours
|
||||||
QString MMCZip::findFolderOfFileInZip(QuaZip * zip, const QString & what, const QString &root)
|
QString MMCZip::findFolderOfFileInZip(QuaZip * zip, const QString & what, const QString &root)
|
||||||
{
|
{
|
||||||
|
@ -21,17 +21,21 @@
|
|||||||
#include "minecraft/mod/Mod.h"
|
#include "minecraft/mod/Mod.h"
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
#include <JlCompress.h>
|
//#include <QuaZip-Qt5-1.2/quazip/JlCompress.h>
|
||||||
|
// TODO: Blocked by https://github.com/stachenov/quazip/pull/141
|
||||||
|
// For now, checkout https://github.com/Scrumplex/quazip/tree/expose-jlcompress-fns at ../../quazip
|
||||||
|
#include <../../quazip/quazip/JlCompress.h>
|
||||||
#include <nonstd/optional>
|
#include <nonstd/optional>
|
||||||
|
|
||||||
namespace MMCZip
|
namespace MMCZip
|
||||||
{
|
{
|
||||||
|
using FilterFunction = std::function<bool(const QString &)>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Merge two zip files, using a filter function
|
* Merge two zip files, using a filter function
|
||||||
*/
|
*/
|
||||||
bool mergeZipFiles(QuaZip *into, QFileInfo from, QSet<QString> &contained,
|
bool mergeZipFiles(QuaZip *into, QFileInfo from, QSet<QString> &contained,
|
||||||
const JlCompress::FilterFunction filter = nullptr);
|
const FilterFunction filter = nullptr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* take a source jar, add mods to it, resulting in target jar
|
* take a source jar, add mods to it, resulting in target jar
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
|
|
||||||
#include "tasks/Task.h"
|
#include "tasks/Task.h"
|
||||||
#include <quazip.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazip.h>
|
||||||
|
|
||||||
#include "QObjectPtr.h"
|
#include "QObjectPtr.h"
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
#include "net/NetJob.h"
|
#include "net/NetJob.h"
|
||||||
#include "tasks/Task.h"
|
#include "tasks/Task.h"
|
||||||
#include "minecraft/VersionFilterData.h"
|
#include "minecraft/VersionFilterData.h"
|
||||||
#include <quazip.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazip.h>
|
||||||
|
|
||||||
class MinecraftVersion;
|
class MinecraftVersion;
|
||||||
class MinecraftInstance;
|
class MinecraftInstance;
|
||||||
|
@ -26,9 +26,9 @@
|
|||||||
#include <io/stream_reader.h>
|
#include <io/stream_reader.h>
|
||||||
#include <tag_string.h>
|
#include <tag_string.h>
|
||||||
#include <tag_primitive.h>
|
#include <tag_primitive.h>
|
||||||
#include <quazip.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazip.h>
|
||||||
#include <quazipfile.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazipfile.h>
|
||||||
#include <quazipdir.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazipdir.h>
|
||||||
|
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
|
|
||||||
|
@ -17,8 +17,8 @@
|
|||||||
#include <minecraft/MinecraftInstance.h>
|
#include <minecraft/MinecraftInstance.h>
|
||||||
#include <launch/LaunchTask.h>
|
#include <launch/LaunchTask.h>
|
||||||
|
|
||||||
#include <quazip.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazip.h>
|
||||||
#include <quazipdir.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazipdir.h>
|
||||||
#include "MMCZip.h"
|
#include "MMCZip.h"
|
||||||
#include "FileSystem.h"
|
#include "FileSystem.h"
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
@ -42,6 +42,7 @@ void ModMinecraftJar::executeTask()
|
|||||||
emitFailed(tr("Couldn't remove stale jar file: %1").arg(finalJarPath));
|
emitFailed(tr("Couldn't remove stale jar file: %1").arg(finalJarPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
// create temporary modded jar, if needed
|
// create temporary modded jar, if needed
|
||||||
auto components = m_inst->getPackProfile();
|
auto components = m_inst->getPackProfile();
|
||||||
auto profile = components->getProfile();
|
auto profile = components->getProfile();
|
||||||
@ -53,12 +54,13 @@ void ModMinecraftJar::executeTask()
|
|||||||
mainJar->getApplicableFiles(currentSystem, jars, temp1, temp2, temp3, m_inst->getLocalLibraryPath());
|
mainJar->getApplicableFiles(currentSystem, jars, temp1, temp2, temp3, m_inst->getLocalLibraryPath());
|
||||||
auto sourceJarPath = jars[0];
|
auto sourceJarPath = jars[0];
|
||||||
if(!MMCZip::createModdedJar(sourceJarPath, finalJarPath, jarMods))
|
if(!MMCZip::createModdedJar(sourceJarPath, finalJarPath, jarMods))
|
||||||
{
|
{ */
|
||||||
|
// TODO: add back support for modded jar
|
||||||
emitFailed(tr("Failed to create the custom Minecraft jar file."));
|
emitFailed(tr("Failed to create the custom Minecraft jar file."));
|
||||||
return;
|
return;
|
||||||
}
|
/*}
|
||||||
}
|
}
|
||||||
emitSucceeded();
|
emitSucceeded();*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModMinecraftJar::finalize()
|
void ModMinecraftJar::finalize()
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
#include <QJsonValue>
|
#include <QJsonValue>
|
||||||
#include <quazip.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazip.h>
|
||||||
#include <quazipfile.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazipfile.h>
|
||||||
#include <toml.h>
|
#include <toml.h>
|
||||||
|
|
||||||
#include "settings/INIFile.h"
|
#include "settings/INIFile.h"
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
#include <QtConcurrent/QtConcurrent>
|
#include <QtConcurrent/QtConcurrent>
|
||||||
|
|
||||||
#include <quazip.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazip.h>
|
||||||
|
|
||||||
#include "MMCZip.h"
|
#include "MMCZip.h"
|
||||||
#include "minecraft/OneSixVersionFormat.h"
|
#include "minecraft/OneSixVersionFormat.h"
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "InstanceTask.h"
|
#include "InstanceTask.h"
|
||||||
#include "net/NetJob.h"
|
#include "net/NetJob.h"
|
||||||
#include "quazip.h"
|
#include "QuaZip-Qt5-1.2/quazip/quazip.h"
|
||||||
#include "quazipdir.h"
|
#include "QuaZip-Qt5-1.2/quazip/quazipdir.h"
|
||||||
#include "meta/Index.h"
|
#include "meta/Index.h"
|
||||||
#include "meta/Version.h"
|
#include "meta/Version.h"
|
||||||
#include "meta/VersionList.h"
|
#include "meta/VersionList.h"
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#include "InstanceTask.h"
|
#include "InstanceTask.h"
|
||||||
#include "net/NetJob.h"
|
#include "net/NetJob.h"
|
||||||
|
|
||||||
#include "quazip.h"
|
#include "QuaZip-Qt5-1.2/quazip/quazip.h"
|
||||||
|
|
||||||
#include <QFutureWatcher>
|
#include <QFutureWatcher>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
@ -19,9 +19,9 @@
|
|||||||
#include <Json.h>
|
#include <Json.h>
|
||||||
#include <minecraft/MinecraftInstance.h>
|
#include <minecraft/MinecraftInstance.h>
|
||||||
#include <minecraft/PackProfile.h>
|
#include <minecraft/PackProfile.h>
|
||||||
#include <quazip.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazip.h>
|
||||||
#include <quazipdir.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazipdir.h>
|
||||||
#include <quazipfile.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazipfile.h>
|
||||||
#include <settings/INISettingsObject.h>
|
#include <settings/INISettingsObject.h>
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
@ -378,6 +378,7 @@ void SaveIcon(InstancePtr m_instance)
|
|||||||
|
|
||||||
bool ExportInstanceDialog::doExport()
|
bool ExportInstanceDialog::doExport()
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
auto name = FS::RemoveInvalidFilenameChars(m_instance->name());
|
auto name = FS::RemoveInvalidFilenameChars(m_instance->name());
|
||||||
|
|
||||||
const QString output = QFileDialog::getSaveFileName(
|
const QString output = QFileDialog::getSaveFileName(
|
||||||
@ -404,11 +405,11 @@ bool ExportInstanceDialog::doExport()
|
|||||||
auto & blocked = proxyModel->blockedPaths();
|
auto & blocked = proxyModel->blockedPaths();
|
||||||
using std::placeholders::_1;
|
using std::placeholders::_1;
|
||||||
if (!JlCompress::compressDir(output, m_instance->instanceRoot(), name, std::bind(&SeparatorPrefixTree<'/'>::covers, blocked, _1)))
|
if (!JlCompress::compressDir(output, m_instance->instanceRoot(), name, std::bind(&SeparatorPrefixTree<'/'>::covers, blocked, _1)))
|
||||||
{
|
{ */
|
||||||
QMessageBox::warning(this, tr("Error"), tr("Unable to export instance"));
|
QMessageBox::warning(this, tr("Error"), tr("Unable to export instance"));
|
||||||
return false;
|
return false;
|
||||||
}
|
/*}
|
||||||
return true;
|
return true;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExportInstanceDialog::done(int result)
|
void ExportInstanceDialog::done(int result)
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#include "classparser.h"
|
#include "classparser.h"
|
||||||
|
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <quazipfile.h>
|
#include <QuaZip-Qt5-1.2/quazip/quazipfile.h>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
namespace classparser
|
namespace classparser
|
||||||
|
@ -1 +0,0 @@
|
|||||||
Subproject commit c9ef32de19bceb58d236f5c22382698deaec69fd
|
|
Loading…
Reference in New Issue
Block a user