aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrial97 <alexandru.tripon97@gmail.com>2023-07-16 20:53:58 +0300
committerTrial97 <alexandru.tripon97@gmail.com>2023-07-16 20:53:58 +0300
commit251055302eec0232a89f0466efe3e7e7f3fa7de3 (patch)
tree07dd9da435765f7332c7b65081777f6f8d813da8
parentb9568279dc364a462e9837ea13bc3c4f61abdda8 (diff)
downloadPrismLauncher-251055302eec0232a89f0466efe3e7e7f3fa7de3.tar.gz
PrismLauncher-251055302eec0232a89f0466efe3e7e7f3fa7de3.tar.bz2
PrismLauncher-251055302eec0232a89f0466efe3e7e7f3fa7de3.zip
format
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
-rw-r--r--launcher/MMCZip.cpp148
-rw-r--r--launcher/MMCZip.h198
-rw-r--r--launcher/ui/dialogs/ExportInstanceDialog.cpp70
-rw-r--r--launcher/ui/dialogs/ExportInstanceDialog.h22
4 files changed, 196 insertions, 242 deletions
diff --git a/launcher/MMCZip.cpp b/launcher/MMCZip.cpp
index 1a336375..4e932a76 100644
--- a/launcher/MMCZip.cpp
+++ b/launcher/MMCZip.cpp
@@ -33,56 +33,48 @@
* limitations under the License.
*/
+#include "MMCZip.h"
#include <quazip/quazip.h>
#include <quazip/quazipdir.h>
#include <quazip/quazipfile.h>
-#include "MMCZip.h"
#include "FileSystem.h"
#include <QCoreApplication>
#include <QDebug>
// ours
-bool MMCZip::mergeZipFiles(QuaZip *into, QFileInfo from, QSet<QString> &contained, const FilterFunction filter)
+bool MMCZip::mergeZipFiles(QuaZip* into, QFileInfo from, QSet<QString>& contained, const FilterFunction filter)
{
QuaZip modZip(from.filePath());
modZip.open(QuaZip::mdUnzip);
QuaZipFile fileInsideMod(&modZip);
QuaZipFile zipOutFile(into);
- for (bool more = modZip.goToFirstFile(); more; more = modZip.goToNextFile())
- {
+ for (bool more = modZip.goToFirstFile(); more; more = modZip.goToNextFile()) {
QString filename = modZip.getCurrentFileName();
- if (filter && !filter(filename))
- {
- qDebug() << "Skipping file " << filename << " from "
- << from.fileName() << " - filtered";
+ if (filter && !filter(filename)) {
+ qDebug() << "Skipping file " << filename << " from " << from.fileName() << " - filtered";
continue;
}
- if (contained.contains(filename))
- {
- qDebug() << "Skipping already contained file " << filename << " from "
- << from.fileName();
+ if (contained.contains(filename)) {
+ qDebug() << "Skipping already contained file " << filename << " from " << from.fileName();
continue;
}
contained.insert(filename);
- if (!fileInsideMod.open(QIODevice::ReadOnly))
- {
+ 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))
- {
+ if (!zipOutFile.open(QIODevice::WriteOnly, info_out)) {
qCritical() << "Failed to open " << filename << " in the jar";
fileInsideMod.close();
return false;
}
- if (!JlCompress::copyData(fileInsideMod, zipOutFile))
- {
+ if (!JlCompress::copyData(fileInsideMod, zipOutFile)) {
zipOutFile.close();
fileInsideMod.close();
qCritical() << "Failed to copy data of " << filename << " into the jar";
@@ -94,10 +86,11 @@ bool MMCZip::mergeZipFiles(QuaZip *into, QFileInfo from, QSet<QString> &containe
return true;
}
-bool MMCZip::compressDirFiles(QuaZip *zip, QString dir, QFileInfoList files, bool followSymlinks)
+bool MMCZip::compressDirFiles(QuaZip* zip, QString dir, QFileInfoList files, bool followSymlinks)
{
QDir directory(dir);
- if (!directory.exists()) return false;
+ if (!directory.exists())
+ return false;
for (auto e : files) {
auto filePath = directory.relativeFilePath(e.absoluteFilePath());
@@ -109,7 +102,8 @@ bool MMCZip::compressDirFiles(QuaZip *zip, QString dir, QFileInfoList files, boo
srcPath = e.canonicalFilePath();
}
}
- if( !JlCompress::compressFile(zip, srcPath, filePath)) return false;
+ if (!JlCompress::compressFile(zip, srcPath, filePath))
+ return false;
}
return true;
@@ -119,7 +113,7 @@ bool MMCZip::compressDirFiles(QString fileCompressed, QString dir, QFileInfoList
{
QuaZip zip(fileCompressed);
QDir().mkpath(QFileInfo(fileCompressed).absolutePath());
- if(!zip.open(QuaZip::mdCreate)) {
+ if (!zip.open(QuaZip::mdCreate)) {
QFile::remove(fileCompressed);
return false;
}
@@ -127,7 +121,7 @@ bool MMCZip::compressDirFiles(QString fileCompressed, QString dir, QFileInfoList
auto result = compressDirFiles(&zip, dir, files, followSymlinks);
zip.close();
- if(zip.getZipError()!=0) {
+ if (zip.getZipError() != 0) {
QFile::remove(fileCompressed);
return false;
}
@@ -139,8 +133,7 @@ bool MMCZip::compressDirFiles(QString fileCompressed, QString dir, QFileInfoList
bool MMCZip::createModdedJar(QString sourceJarPath, QString targetJarPath, const QList<Mod*>& mods)
{
QuaZip zipOut(targetJarPath);
- if (!zipOut.open(QuaZip::mdCreate))
- {
+ if (!zipOut.open(QuaZip::mdCreate)) {
QFile::remove(targetJarPath);
qCritical() << "Failed to open the minecraft.jar for modding";
return false;
@@ -151,37 +144,29 @@ bool MMCZip::createModdedJar(QString sourceJarPath, QString targetJarPath, const
// Modify the jar
// This needs to be done in reverse-order to ensure we respect the loading order of components
- for (auto i = mods.crbegin(); i != mods.crend(); i++)
- {
+ for (auto i = mods.crbegin(); i != mods.crend(); i++) {
const auto* mod = *i;
// do not merge disabled mods.
if (!mod->enabled())
continue;
- if (mod->type() == ResourceType::ZIPFILE)
- {
- if (!mergeZipFiles(&zipOut, mod->fileinfo(), addedFiles))
- {
+ if (mod->type() == ResourceType::ZIPFILE) {
+ if (!mergeZipFiles(&zipOut, mod->fileinfo(), addedFiles)) {
zipOut.close();
QFile::remove(targetJarPath);
qCritical() << "Failed to add" << mod->fileinfo().fileName() << "to the jar.";
return false;
}
- }
- else if (mod->type() == ResourceType::SINGLEFILE)
- {
+ } else if (mod->type() == ResourceType::SINGLEFILE) {
// FIXME: buggy - does not work with addedFiles
auto filename = mod->fileinfo();
- if (!JlCompress::compressFile(&zipOut, filename.absoluteFilePath(), filename.fileName()))
- {
+ if (!JlCompress::compressFile(&zipOut, filename.absoluteFilePath(), filename.fileName())) {
zipOut.close();
QFile::remove(targetJarPath);
qCritical() << "Failed to add" << mod->fileinfo().fileName() << "to the jar.";
return false;
}
addedFiles.insert(filename.fileName());
- }
- else if (mod->type() == ResourceType::FOLDER)
- {
+ } else if (mod->type() == ResourceType::FOLDER) {
// untested, but seems to be unused / not possible to reach
// FIXME: buggy - does not work with addedFiles
auto filename = mod->fileinfo();
@@ -197,18 +182,14 @@ bool MMCZip::createModdedJar(QString sourceJarPath, QString targetJarPath, const
files.removeAll(e);
}
- if (!MMCZip::compressDirFiles(&zipOut, parent_dir, files))
- {
+ if (!MMCZip::compressDirFiles(&zipOut, parent_dir, files)) {
zipOut.close();
QFile::remove(targetJarPath);
qCritical() << "Failed to add" << mod->fileinfo().fileName() << "to the jar.";
return false;
}
- qDebug() << "Adding folder " << filename.fileName() << " from "
- << filename.absoluteFilePath();
- }
- else
- {
+ 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);
@@ -217,8 +198,7 @@ bool MMCZip::createModdedJar(QString sourceJarPath, QString targetJarPath, const
}
}
- if (!mergeZipFiles(&zipOut, QFileInfo(sourceJarPath), addedFiles, [](const QString key){return !key.contains("META-INF");}))
- {
+ 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.";
@@ -227,8 +207,7 @@ bool MMCZip::createModdedJar(QString sourceJarPath, QString targetJarPath, const
// Recompress the jar
zipOut.close();
- if (zipOut.getZipError() != 0)
- {
+ if (zipOut.getZipError() != 0) {
QFile::remove(targetJarPath);
qCritical() << "Failed to finalize minecraft.jar!";
return false;
@@ -261,27 +240,23 @@ QString MMCZip::findFolderOfFileInZip(QuaZip* zip, const QString& what, const QS
}
// ours
-bool MMCZip::findFilesInZip(QuaZip * zip, const QString & what, QStringList & result, const QString &root)
+bool MMCZip::findFilesInZip(QuaZip* zip, const QString& what, QStringList& result, const QString& root)
{
QuaZipDir rootDir(zip, root);
- for(auto fileName: rootDir.entryList(QDir::Files))
- {
- if(fileName == what)
- {
+ for (auto fileName : rootDir.entryList(QDir::Files)) {
+ if (fileName == what) {
result.append(root);
return true;
}
}
- for(auto fileName: rootDir.entryList(QDir::Dirs))
- {
+ for (auto fileName : rootDir.entryList(QDir::Dirs)) {
findFilesInZip(zip, what, result, root + fileName);
}
return !result.isEmpty();
}
-
// ours
-std::optional<QStringList> MMCZip::extractSubDir(QuaZip *zip, const QString & subdir, const QString &target)
+std::optional<QStringList> MMCZip::extractSubDir(QuaZip* zip, const QString& subdir, const QString& target)
{
auto target_top_dir = QUrl::fromLocalFile(target);
@@ -289,16 +264,13 @@ std::optional<QStringList> MMCZip::extractSubDir(QuaZip *zip, const QString & su
qDebug() << "Extracting subdir" << subdir << "from" << zip->getZipName() << "to" << target;
auto numEntries = zip->getEntriesCount();
- if(numEntries < 0) {
+ if (numEntries < 0) {
qWarning() << "Failed to enumerate files in archive";
return std::nullopt;
- }
- else if(numEntries == 0) {
+ } else if (numEntries == 0) {
qDebug() << "Extracting empty archives seems odd...";
return extracted;
- }
- else if (!zip->goToFirstFile())
- {
+ } else if (!zip->goToFirstFile()) {
qWarning() << "Failed to seek to first file in zip";
return std::nullopt;
}
@@ -334,7 +306,8 @@ std::optional<QStringList> MMCZip::extractSubDir(QuaZip *zip, const QString & su
}
if (!target_top_dir.isParentOf(QUrl::fromLocalFile(target_file_path))) {
- qWarning() << "Extracting" << relative_file_name << "was cancelled, because it was effectively outside of the target path" << target;
+ qWarning() << "Extracting" << relative_file_name << "was cancelled, because it was effectively outside of the target path"
+ << target;
return std::nullopt;
}
@@ -345,7 +318,8 @@ std::optional<QStringList> MMCZip::extractSubDir(QuaZip *zip, const QString & su
}
extracted.append(target_file_path);
- QFile::setPermissions(target_file_path, QFileDevice::Permission::ReadUser | QFileDevice::Permission::WriteUser | QFileDevice::Permission::ExeUser);
+ QFile::setPermissions(target_file_path,
+ QFileDevice::Permission::ReadUser | QFileDevice::Permission::WriteUser | QFileDevice::Permission::ExeUser);
qDebug() << "Extracted file" << relative_file_name << "to" << target_file_path;
} while (zip->goToNextFile());
@@ -354,7 +328,7 @@ std::optional<QStringList> MMCZip::extractSubDir(QuaZip *zip, const QString & su
}
// ours
-bool MMCZip::extractRelFile(QuaZip *zip, const QString &file, const QString &target)
+bool MMCZip::extractRelFile(QuaZip* zip, const QString& file, const QString& target)
{
return JlCompress::extractFile(zip, file, target);
}
@@ -363,14 +337,14 @@ bool MMCZip::extractRelFile(QuaZip *zip, const QString &file, const QString &tar
std::optional<QStringList> MMCZip::extractDir(QString fileCompressed, QString dir)
{
QuaZip zip(fileCompressed);
- if (!zip.open(QuaZip::mdUnzip))
- {
+ if (!zip.open(QuaZip::mdUnzip)) {
// check if this is a minimum size empty zip file...
QFileInfo fileInfo(fileCompressed);
- if(fileInfo.size() == 22) {
+ if (fileInfo.size() == 22) {
return QStringList();
}
- qWarning() << "Could not open archive for unzipping:" << fileCompressed << "Error:" << zip.getZipError();;
+ qWarning() << "Could not open archive for unzipping:" << fileCompressed << "Error:" << zip.getZipError();
+ ;
return std::nullopt;
}
return MMCZip::extractSubDir(&zip, "", dir);
@@ -380,14 +354,14 @@ std::optional<QStringList> MMCZip::extractDir(QString fileCompressed, QString di
std::optional<QStringList> MMCZip::extractDir(QString fileCompressed, QString subdir, QString dir)
{
QuaZip zip(fileCompressed);
- if (!zip.open(QuaZip::mdUnzip))
- {
+ if (!zip.open(QuaZip::mdUnzip)) {
// check if this is a minimum size empty zip file...
QFileInfo fileInfo(fileCompressed);
- if(fileInfo.size() == 22) {
+ if (fileInfo.size() == 22) {
return QStringList();
}
- qWarning() << "Could not open archive for unzipping:" << fileCompressed << "Error:" << zip.getZipError();;
+ qWarning() << "Could not open archive for unzipping:" << fileCompressed << "Error:" << zip.getZipError();
+ ;
return std::nullopt;
}
return MMCZip::extractSubDir(&zip, subdir, dir);
@@ -397,11 +371,10 @@ std::optional<QStringList> MMCZip::extractDir(QString fileCompressed, QString su
bool MMCZip::extractFile(QString fileCompressed, QString file, QString target)
{
QuaZip zip(fileCompressed);
- if (!zip.open(QuaZip::mdUnzip))
- {
+ if (!zip.open(QuaZip::mdUnzip)) {
// check if this is a minimum size empty zip file...
QFileInfo fileInfo(fileCompressed);
- if(fileInfo.size() == 22) {
+ if (fileInfo.size() == 22) {
return true;
}
qWarning() << "Could not open archive for unzipping:" << fileCompressed << "Error:" << zip.getZipError();
@@ -410,10 +383,14 @@ bool MMCZip::extractFile(QString fileCompressed, QString file, QString target)
return MMCZip::extractRelFile(&zip, file, target);
}
-bool MMCZip::collectFileListRecursively(const QString& rootDir, const QString& subDir, QFileInfoList *files,
- MMCZip::FilterFunction excludeFilter) {
+bool MMCZip::collectFileListRecursively(const QString& rootDir,
+ const QString& subDir,
+ QFileInfoList* files,
+ MMCZip::FilterFunction excludeFilter)
+{
QDir rootDirectory(rootDir);
- if (!rootDirectory.exists()) return false;
+ if (!rootDirectory.exists())
+ return false;
QDir directory;
if (subDir == nullptr)
@@ -421,18 +398,19 @@ bool MMCZip::collectFileListRecursively(const QString& rootDir, const QString& s
else
directory = QDir(subDir);
- if (!directory.exists()) return false; // shouldn't ever happen
+ if (!directory.exists())
+ return false; // shouldn't ever happen
// recurse directories
QFileInfoList entries = directory.entryInfoList(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::Hidden);
- for (const auto& e: entries) {
+ for (const auto& e : entries) {
if (!collectFileListRecursively(rootDir, e.filePath(), files, excludeFilter))
return false;
}
// collect files
entries = directory.entryInfoList(QDir::Files);
- for (const auto& e: entries) {
+ for (const auto& e : entries) {
QString relativeFilePath = rootDirectory.relativeFilePath(e.absoluteFilePath());
if (excludeFilter && excludeFilter(relativeFilePath)) {
qDebug() << "Skipping file " << relativeFilePath;
diff --git a/launcher/MMCZip.h b/launcher/MMCZip.h
index 2a78f830..c7cabdc5 100644
--- a/launcher/MMCZip.h
+++ b/launcher/MMCZip.h
@@ -35,110 +35,108 @@
#pragma once
-#include <QString>
#include <QFileInfo>
#include <QSet>
-#include "minecraft/mod/Mod.h"
+#include <QString>
#include <functional>
+#include "minecraft/mod/Mod.h"
#include <quazip/JlCompress.h>
#include <optional>
-namespace MMCZip
-{
- using FilterFunction = std::function<bool(const QString &)>;
-
- /**
- * Merge two zip files, using a filter function
- */
- bool mergeZipFiles(QuaZip *into, QFileInfo from, QSet<QString> &contained,
- const FilterFunction filter = nullptr);
-
- /**
- * Compress directory, by providing a list of files to compress
- * \param zip target archive
- * \param dir directory that will be compressed (to compress with relative paths)
- * \param files list of files to compress
- * \param followSymlinks should follow symlinks when compressing file data
- * \return true for success or false for failure
- */
- bool compressDirFiles(QuaZip *zip, QString dir, QFileInfoList files, bool followSymlinks = false);
-
- /**
- * Compress directory, by providing a list of files to compress
- * \param fileCompressed target archive file
- * \param dir directory that will be compressed (to compress with relative paths)
- * \param files list of files to compress
- * \param followSymlinks should follow symlinks when compressing file data
- * \return true for success or false for failure
- */
- bool compressDirFiles(QString fileCompressed, QString dir, QFileInfoList files, bool followSymlinks = false);
-
- /**
- * take a source jar, add mods to it, resulting in target jar
- */
- bool createModdedJar(QString sourceJarPath, QString targetJarPath, const QList<Mod*>& mods);
-
- /**
- * Find a single file in archive by file name (not path)
- *
- * \param ignore_paths paths to skip when recursing the search
- *
- * \return the path prefix where the file is
- */
- QString findFolderOfFileInZip(QuaZip * zip, const QString & what, const QStringList& ignore_paths = {}, const QString &root = QString(""));
-
- /**
- * Find a multiple files of the same name in archive by file name
- * If a file is found in a path, no deeper paths are searched
- *
- * \return true if anything was found
- */
- bool findFilesInZip(QuaZip * zip, const QString & what, QStringList & result, const QString &root = QString());
-
- /**
- * Extract a subdirectory from an archive
- */
- std::optional<QStringList> extractSubDir(QuaZip *zip, const QString & subdir, const QString &target);
-
- bool extractRelFile(QuaZip *zip, const QString & file, const QString &target);
-
- /**
- * Extract a whole archive.
- *
- * \param fileCompressed The name of the archive.
- * \param dir The directory to extract to, the current directory if left empty.
- * \return The list of the full paths of the files extracted, empty on failure.
- */
- std::optional<QStringList> extractDir(QString fileCompressed, QString dir);
-
- /**
- * Extract a subdirectory from an archive
- *
- * \param fileCompressed The name of the archive.
- * \param subdir The directory within the archive to extract
- * \param dir The directory to extract to, the current directory if left empty.
- * \return The list of the full paths of the files extracted, empty on failure.
- */
- std::optional<QStringList> extractDir(QString fileCompressed, QString subdir, QString dir);
-
- /**
- * Extract a single file from an archive into a directory
- *
- * \param fileCompressed The name of the archive.
- * \param file The file within the archive to extract
- * \param dir The directory to extract to, the current directory if left empty.
- * \return true for success or false for failure
- */
- bool extractFile(QString fileCompressed, QString file, QString dir);
-
- /**
- * Populate a QFileInfoList with a directory tree recursively, while allowing to excludeFilter what shouldn't be included.
- * \param rootDir directory to start off
- * \param subDir subdirectory, should be nullptr for first invocation
- * \param files resulting list of QFileInfo
- * \param excludeFilter function to excludeFilter which files shouldn't be included (returning true means to excude)
- * \return true for success or false for failure
- */
- bool collectFileListRecursively(const QString &rootDir, const QString &subDir, QFileInfoList *files, FilterFunction excludeFilter);
-}
+namespace MMCZip {
+using FilterFunction = std::function<bool(const QString&)>;
+
+/**
+ * Merge two zip files, using a filter function
+ */
+bool mergeZipFiles(QuaZip* into, QFileInfo from, QSet<QString>& contained, const FilterFunction filter = nullptr);
+
+/**
+ * Compress directory, by providing a list of files to compress
+ * \param zip target archive
+ * \param dir directory that will be compressed (to compress with relative paths)
+ * \param files list of files to compress
+ * \param followSymlinks should follow symlinks when compressing file data
+ * \return true for success or false for failure
+ */
+bool compressDirFiles(QuaZip* zip, QString dir, QFileInfoList files, bool followSymlinks = false);
+
+/**
+ * Compress directory, by providing a list of files to compress
+ * \param fileCompressed target archive file
+ * \param dir directory that will be compressed (to compress with relative paths)
+ * \param files list of files to compress
+ * \param followSymlinks should follow symlinks when compressing file data
+ * \return true for success or false for failure
+ */
+bool compressDirFiles(QString fileCompressed, QString dir, QFileInfoList files, bool followSymlinks = false);
+
+/**
+ * take a source jar, add mods to it, resulting in target jar
+ */
+bool createModdedJar(QString sourceJarPath, QString targetJarPath, const QList<Mod*>& mods);
+
+/**
+ * Find a single file in archive by file name (not path)
+ *
+ * \param ignore_paths paths to skip when recursing the search
+ *
+ * \return the path prefix where the file is
+ */
+QString findFolderOfFileInZip(QuaZip* zip, const QString& what, const QStringList& ignore_paths = {}, const QString& root = QString(""));
+
+/**
+ * Find a multiple files of the same name in archive by file name
+ * If a file is found in a path, no deeper paths are searched
+ *
+ * \return true if anything was found
+ */
+bool findFilesInZip(QuaZip* zip, const QString& what, QStringList& result, const QString& root = QString());
+
+/**
+ * Extract a subdirectory from an archive
+ */
+std::optional<QStringList> extractSubDir(QuaZip* zip, const QString& subdir, const QString& target);
+
+bool extractRelFile(QuaZip* zip, const QString& file, const QString& target);
+
+/**
+ * Extract a whole archive.
+ *
+ * \param fileCompressed The name of the archive.
+ * \param dir The directory to extract to, the current directory if left empty.
+ * \return The list of the full paths of the files extracted, empty on failure.
+ */
+std::optional<QStringList> extractDir(QString fileCompressed, QString dir);
+
+/**
+ * Extract a subdirectory from an archive
+ *
+ * \param fileCompressed The name of the archive.
+ * \param subdir The directory within the archive to extract
+ * \param dir The directory to extract to, the current directory if left empty.
+ * \return The list of the full paths of the files extracted, empty on failure.
+ */
+std::optional<QStringList> extractDir(QString fileCompressed, QString subdir, QString dir);
+
+/**
+ * Extract a single file from an archive into a directory
+ *
+ * \param fileCompressed The name of the archive.
+ * \param file The file within the archive to extract
+ * \param dir The directory to extract to, the current directory if left empty.
+ * \return true for success or false for failure
+ */
+bool extractFile(QString fileCompressed, QString file, QString dir);
+
+/**
+ * Populate a QFileInfoList with a directory tree recursively, while allowing to excludeFilter what shouldn't be included.
+ * \param rootDir directory to start off
+ * \param subDir subdirectory, should be nullptr for first invocation
+ * \param files resulting list of QFileInfo
+ * \param excludeFilter function to excludeFilter which files shouldn't be included (returning true means to excude)
+ * \return true for success or false for failure
+ */
+bool collectFileListRecursively(const QString& rootDir, const QString& subDir, QFileInfoList* files, FilterFunction excludeFilter);
+} // namespace MMCZip
diff --git a/launcher/ui/dialogs/ExportInstanceDialog.cpp b/launcher/ui/dialogs/ExportInstanceDialog.cpp
index cc41c394..379ec79f 100644
--- a/launcher/ui/dialogs/ExportInstanceDialog.cpp
+++ b/launcher/ui/dialogs/ExportInstanceDialog.cpp
@@ -72,7 +72,7 @@ ExportInstanceDialog::ExportInstanceDialog(InstancePtr instance, QWidget* parent
ui->treeView->setRootIndex(proxyModel->mapFromSource(model->index(root)));
ui->treeView->sortByColumn(0, Qt::AscendingOrder);
- connect(proxyModel, SIGNAL(rowsInserted(QModelIndex,int,int)), SLOT(rowsInserted(QModelIndex,int,int)));
+ connect(proxyModel, SIGNAL(rowsInserted(QModelIndex, int, int)), SLOT(rowsInserted(QModelIndex, int, int)));
model->setFilter(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::AllDirs | QDir::Hidden);
model->setRootPath(root);
@@ -92,32 +92,26 @@ void SaveIcon(InstancePtr m_instance)
auto iconKey = m_instance->iconKey();
auto iconList = APPLICATION->icons();
auto mmcIcon = iconList->icon(iconKey);
- if(!mmcIcon || mmcIcon->isBuiltIn()) {
+ if (!mmcIcon || mmcIcon->isBuiltIn()) {
return;
}
auto path = mmcIcon->getFilePath();
- if(!path.isNull()) {
- QFileInfo inInfo (path);
- FS::copy(path, FS::PathCombine(m_instance->instanceRoot(), inInfo.fileName())) ();
+ if (!path.isNull()) {
+ QFileInfo inInfo(path);
+ FS::copy(path, FS::PathCombine(m_instance->instanceRoot(), inInfo.fileName()))();
return;
}
- auto & image = mmcIcon->m_images[mmcIcon->type()];
- auto & icon = image.icon;
+ auto& image = mmcIcon->m_images[mmcIcon->type()];
+ auto& icon = image.icon;
auto sizes = icon.availableSizes();
- if(sizes.size() == 0)
- {
+ if (sizes.size() == 0) {
return;
}
- auto areaOf = [](QSize size)
- {
- return size.width() * size.height();
- };
+ auto areaOf = [](QSize size) { return size.width() * size.height(); };
QSize largest = sizes[0];
// find variant with largest area
- for(auto size: sizes)
- {
- if(areaOf(largest) < areaOf(size))
- {
+ for (auto size : sizes) {
+ if (areaOf(largest) < areaOf(size)) {
largest = size;
}
}
@@ -129,11 +123,9 @@ bool ExportInstanceDialog::doExport()
{
auto name = FS::RemoveInvalidFilenameChars(m_instance->name());
- const QString output = QFileDialog::getSaveFileName(
- this, tr("Export %1").arg(m_instance->name()),
- FS::PathCombine(QDir::homePath(), name + ".zip"), "Zip (*.zip)", nullptr);
- if (output.isEmpty())
- {
+ const QString output = QFileDialog::getSaveFileName(this, tr("Export %1").arg(m_instance->name()),
+ FS::PathCombine(QDir::homePath(), name + ".zip"), "Zip (*.zip)", nullptr);
+ if (output.isEmpty()) {
return false;
}
@@ -146,8 +138,7 @@ bool ExportInstanceDialog::doExport()
return false;
}
- if (!MMCZip::compressDirFiles(output, m_instance->instanceRoot(), files, true))
- {
+ if (!MMCZip::compressDirFiles(output, m_instance->instanceRoot(), files, true)) {
QMessageBox::warning(this, tr("Error"), tr("Unable to export instance"));
return false;
}
@@ -157,15 +148,11 @@ bool ExportInstanceDialog::doExport()
void ExportInstanceDialog::done(int result)
{
savePackIgnore();
- if (result == QDialog::Accepted)
- {
- if (doExport())
- {
+ if (result == QDialog::Accepted) {
+ if (doExport()) {
QDialog::done(QDialog::Accepted);
return;
- }
- else
- {
+ } else {
return;
}
}
@@ -174,15 +161,12 @@ void ExportInstanceDialog::done(int result)
void ExportInstanceDialog::rowsInserted(QModelIndex parent, int top, int bottom)
{
- //WARNING: possible off-by-one?
- for(int i = top; i < bottom; i++)
- {
+ // WARNING: possible off-by-one?
+ for (int i = top; i < bottom; i++) {
auto node = proxyModel->index(i, 0, parent);
- if(proxyModel->shouldExpand(node))
- {
+ if (proxyModel->shouldExpand(node)) {
auto expNode = node.parent();
- if(!expNode.isValid())
- {
+ if (!expNode.isValid()) {
continue;
}
ui->treeView->expand(node);
@@ -199,8 +183,7 @@ void ExportInstanceDialog::loadPackIgnore()
{
auto filename = ignoreFileName();
QFile ignoreFile(filename);
- if(!ignoreFile.open(QIODevice::ReadOnly))
- {
+ if (!ignoreFile.open(QIODevice::ReadOnly)) {
return;
}
auto data = ignoreFile.readAll();
@@ -216,12 +199,9 @@ void ExportInstanceDialog::savePackIgnore()
{
auto data = proxyModel->blockedPaths().toStringList().join('\n').toUtf8();
auto filename = ignoreFileName();
- try
- {
+ try {
FS::write(filename, data);
- }
- catch (const Exception &e)
- {
+ } catch (const Exception& e) {
qWarning() << e.cause();
}
}
diff --git a/launcher/ui/dialogs/ExportInstanceDialog.h b/launcher/ui/dialogs/ExportInstanceDialog.h
index 5e801875..20a92807 100644
--- a/launcher/ui/dialogs/ExportInstanceDialog.h
+++ b/launcher/ui/dialogs/ExportInstanceDialog.h
@@ -38,39 +38,37 @@
#include <QDialog>
#include <QModelIndex>
#include <memory>
-#include "FileIgnoreProxy.h"
#include "FastFileIconProvider.h"
+#include "FileIgnoreProxy.h"
class BaseInstance;
typedef std::shared_ptr<BaseInstance> InstancePtr;
-namespace Ui
-{
+namespace Ui {
class ExportInstanceDialog;
}
-class ExportInstanceDialog : public QDialog
-{
+class ExportInstanceDialog : public QDialog {
Q_OBJECT
-public:
- explicit ExportInstanceDialog(InstancePtr instance, QWidget *parent = 0);
+ public:
+ explicit ExportInstanceDialog(InstancePtr instance, QWidget* parent = 0);
~ExportInstanceDialog();
virtual void done(int result);
-private:
+ private:
bool doExport();
void loadPackIgnore();
void savePackIgnore();
QString ignoreFileName();
-private:
- Ui::ExportInstanceDialog *ui;
+ private:
+ Ui::ExportInstanceDialog* ui;
InstancePtr m_instance;
- FileIgnoreProxy * proxyModel;
+ FileIgnoreProxy* proxyModel;
FastFileIconProvider icons;
-private slots:
+ private slots:
void rowsInserted(QModelIndex parent, int top, int bottom);
};