aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheKodeToad <TheKodeToad@proton.me>2023-03-06 17:22:20 +0000
committerTheKodeToad <TheKodeToad@proton.me>2023-03-06 17:24:04 +0000
commit5d5fcae5010ce0860bef23d161f0b0d698ade1ab (patch)
tree035296f7749ae9983dc0c673971e96db94efbd94
parent970ec8187c2a6b45b9b1031260c07f4e26fe8827 (diff)
downloadPrismLauncher-5d5fcae5010ce0860bef23d161f0b0d698ade1ab.tar.gz
PrismLauncher-5d5fcae5010ce0860bef23d161f0b0d698ade1ab.tar.bz2
PrismLauncher-5d5fcae5010ce0860bef23d161f0b0d698ade1ab.zip
Further reduce buggy behaviour
Signed-off-by: TheKodeToad <TheKodeToad@proton.me>
-rw-r--r--launcher/modplatform/modrinth/ModrinthPackExportTask.cpp84
-rw-r--r--launcher/modplatform/modrinth/ModrinthPackExportTask.h1
2 files changed, 53 insertions, 32 deletions
diff --git a/launcher/modplatform/modrinth/ModrinthPackExportTask.cpp b/launcher/modplatform/modrinth/ModrinthPackExportTask.cpp
index 3c69413d..e12ee923 100644
--- a/launcher/modplatform/modrinth/ModrinthPackExportTask.cpp
+++ b/launcher/modplatform/modrinth/ModrinthPackExportTask.cpp
@@ -19,6 +19,7 @@
#include "ModrinthPackExportTask.h"
#include <qcryptographichash.h>
+#include <qtconcurrentrun.h>
#include <QFileInfo>
#include <QFileInfoList>
#include <QMessageBox>
@@ -56,13 +57,17 @@ void ModrinthPackExportTask::executeTask()
bool ModrinthPackExportTask::abort()
{
- if (!task.isNull() && task->abort()) {
+ if (task != nullptr) {
+ if (!task->abort())
+ return false;
+
task = nullptr;
emitFailed(tr("Aborted"));
return true;
}
- return false;
+ pendingAbort = true;
+ return true;
}
void ModrinthPackExportTask::collectFiles()
@@ -106,6 +111,8 @@ void ModrinthPackExportTask::collectFiles()
void ModrinthPackExportTask::parseApiResponse(QByteArray* response)
{
+ task = nullptr;
+
try {
QJsonDocument doc = Json::requireDocument(*response);
@@ -137,41 +144,54 @@ void ModrinthPackExportTask::parseApiResponse(QByteArray* response)
void ModrinthPackExportTask::buildZip()
{
- setStatus("Adding files...");
- QuaZip zip(output);
- if (!zip.open(QuaZip::mdCreate)) {
- QFile::remove(output);
- emitFailed(tr("Could not create file"));
- return;
- }
+ QtConcurrent::run(QThreadPool::globalInstance(), [this]() {
+ setStatus("Adding files...");
+ QuaZip zip(output);
+ if (!zip.open(QuaZip::mdCreate)) {
+ QFile::remove(output);
+ emitFailed(tr("Could not create file"));
+ return;
+ }
- QuaZipFile indexFile(&zip);
- if (!indexFile.open(QIODevice::WriteOnly, QuaZipNewInfo("modrinth.index.json"))) {
- QFile::remove(output);
- emitFailed(tr("Could not create index"));
- return;
- }
- indexFile.write(generateIndex());
+ if (pendingAbort) {
+ emitFailed(tr("Aborted"));
+ return;
+ }
- QDir mc(instance->gameRoot());
- size_t i = 0;
- for (const QFileInfo& file : files) {
- setProgress(i, files.length());
- QString relative = mc.relativeFilePath(file.absoluteFilePath());
- if (!resolvedFiles.contains(relative) && !JlCompress::compressFile(&zip, file.absoluteFilePath(), "overrides/" + relative))
- qWarning() << "Could not compress" << file;
- i++;
- }
+ QuaZipFile indexFile(&zip);
+ if (!indexFile.open(QIODevice::WriteOnly, QuaZipNewInfo("modrinth.index.json"))) {
+ QFile::remove(output);
+ emitFailed(tr("Could not create index"));
+ return;
+ }
+ indexFile.write(generateIndex());
+
+ QDir mc(instance->gameRoot());
+ size_t i = 0;
+ for (const QFileInfo& file : files) {
+ if (pendingAbort) {
+ QFile::remove(output);
+ emitFailed(tr("Aborted"));
+ return;
+ }
- zip.close();
+ setProgress(i, files.length());
+ QString relative = mc.relativeFilePath(file.absoluteFilePath());
+ if (!resolvedFiles.contains(relative) && !JlCompress::compressFile(&zip, file.absoluteFilePath(), "overrides/" + relative))
+ qWarning() << "Could not compress" << file;
+ i++;
+ }
- if (zip.getZipError() != 0) {
- QFile::remove(output);
- emitFailed(tr("A zip error occured"));
- return;
- }
+ zip.close();
+
+ if (zip.getZipError() != 0) {
+ QFile::remove(output);
+ emitFailed(tr("A zip error occured"));
+ return;
+ }
- emitSucceeded();
+ emitSucceeded();
+ });
}
QByteArray ModrinthPackExportTask::generateIndex()
diff --git a/launcher/modplatform/modrinth/ModrinthPackExportTask.h b/launcher/modplatform/modrinth/ModrinthPackExportTask.h
index d7a42e7b..04578d2c 100644
--- a/launcher/modplatform/modrinth/ModrinthPackExportTask.h
+++ b/launcher/modplatform/modrinth/ModrinthPackExportTask.h
@@ -55,6 +55,7 @@ class ModrinthPackExportTask : public Task {
QMap<QString, QString> pendingHashes;
QMap<QString, ResolvedFile> resolvedFiles;
Task::Ptr task;
+ bool pendingAbort = false;
void collectFiles();
void parseApiResponse(QByteArray* response);