summaryrefslogtreecommitdiffstats
path: root/api/logic/MMCZip.cpp
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2017-05-25 01:24:27 +0200
committerPetr Mrázek <peterix@gmail.com>2017-05-25 01:24:27 +0200
commit50b8412a2690e8b2cbbbbc5c8481e45df084603d (patch)
tree8e5edad64b4e4d2d4f9a111b41a5b11f81a6fdcc /api/logic/MMCZip.cpp
parent2a81e21f5eb2f2b3cf67e8d0194219057604b525 (diff)
downloadMultiMC-50b8412a2690e8b2cbbbbc5c8481e45df084603d.tar
MultiMC-50b8412a2690e8b2cbbbbc5c8481e45df084603d.tar.gz
MultiMC-50b8412a2690e8b2cbbbbc5c8481e45df084603d.tar.lz
MultiMC-50b8412a2690e8b2cbbbbc5c8481e45df084603d.tar.xz
MultiMC-50b8412a2690e8b2cbbbbc5c8481e45df084603d.zip
NOISSUE do not try to restore file permissions when importing modpacks
Diffstat (limited to 'api/logic/MMCZip.cpp')
-rw-r--r--api/logic/MMCZip.cpp26
1 files changed, 15 insertions, 11 deletions
diff --git a/api/logic/MMCZip.cpp b/api/logic/MMCZip.cpp
index 50e352b4..6b4a9ff8 100644
--- a/api/logic/MMCZip.cpp
+++ b/api/logic/MMCZip.cpp
@@ -45,11 +45,6 @@ bool copyData(QIODevice &inFile, QIODevice &outFile)
return true;
}
-QStringList MMCZip::extractDir(QString fileCompressed, QString dir)
-{
- return JlCompress::extractDir(fileCompressed, dir);
-}
-
bool compressFile(QuaZip *zip, QString fileName, QString fileDest)
{
if (!zip)
@@ -394,7 +389,7 @@ bool removeFile(QStringList listFile)
return ret;
}
-bool MMCZip::extractFile(QuaZip *zip, const QString &fileName, const QString &fileDest)
+bool MMCZip::extractFile(QuaZip *zip, const QString &fileName, const QString &fileDest, MMCZip::Options opts)
{
if(!zip)
return false;
@@ -409,7 +404,6 @@ bool MMCZip::extractFile(QuaZip *zip, const QString &fileName, const QString &fi
if (!inFile.open(QIODevice::ReadOnly) || inFile.getZipError() != UNZ_OK)
return false;
- // Controllo esistenza cartella file risultato
QDir curDir;
if (fileDest.endsWith('/'))
{
@@ -433,7 +427,7 @@ bool MMCZip::extractFile(QuaZip *zip, const QString &fileName, const QString &fi
QFile::Permissions srcPerm = info.getPermissions();
if (fileDest.endsWith('/') && QFileInfo(fileDest).isDir())
{
- if (srcPerm != 0)
+ if (!opts.testFlag(Option::NoPermissions) && srcPerm != 0)
{
QFile(fileDest).setPermissions(srcPerm);
}
@@ -460,14 +454,14 @@ bool MMCZip::extractFile(QuaZip *zip, const QString &fileName, const QString &fi
return false;
}
- if (srcPerm != 0)
+ if (!opts.testFlag(Option::NoPermissions) && srcPerm != 0)
{
outFile.setPermissions(srcPerm);
}
return true;
}
-QStringList MMCZip::extractSubDir(QuaZip *zip, const QString & subdir, const QString &target)
+QStringList MMCZip::extractSubDir(QuaZip *zip, const QString & subdir, const QString &target, MMCZip::Options opts)
{
QDir directory(target);
QStringList extracted;
@@ -488,7 +482,7 @@ QStringList MMCZip::extractSubDir(QuaZip *zip, const QString & subdir, const QSt
{
absFilePath += "/";
}
- if (!extractFile(zip, "", absFilePath))
+ if (!MMCZip::extractFile(zip, "", absFilePath, opts))
{
removeFile(extracted);
return QStringList();
@@ -497,3 +491,13 @@ QStringList MMCZip::extractSubDir(QuaZip *zip, const QString & subdir, const QSt
} while (zip->goToNextFile());
return extracted;
}
+
+QStringList MMCZip::extractDir(QString fileCompressed, QString dir, MMCZip::Options opts)
+{
+ QuaZip zip(fileCompressed);
+ if (!zip.open(QuaZip::mdUnzip))
+ {
+ return {};
+ }
+ return MMCZip::extractSubDir(&zip, "", dir, opts);
+}