fix: hook up setAbortStatus in instance import tasks
Signed-off-by: flow <flowlnlnln@gmail.com>
This commit is contained in:
		| @@ -2,11 +2,22 @@ | |||||||
|  |  | ||||||
| #include <QDebug> | #include <QDebug> | ||||||
|  |  | ||||||
| InstanceCreationTask::InstanceCreationTask() {} | InstanceCreationTask::InstanceCreationTask() = default; | ||||||
|  |  | ||||||
| void InstanceCreationTask::executeTask() | void InstanceCreationTask::executeTask() | ||||||
| { | { | ||||||
|     if (updateInstance() || createInstance()) { |     if (updateInstance()) { | ||||||
|  |         emitSucceeded(); | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // If this is set, it means we're updating an instance. Since the previous step likely | ||||||
|  |     // removed some old files, we'd better not let the user abort the next task, since it'd | ||||||
|  |     // put the instance in an invalid state. | ||||||
|  |     // TODO: Figure out an unexpensive way of making such file removal a recoverable transaction. | ||||||
|  |     setAbortStatus(!shouldOverride()); | ||||||
|  |  | ||||||
|  |     if (createInstance()) { | ||||||
|         emitSucceeded(); |         emitSucceeded(); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -63,15 +63,20 @@ InstanceImportTask::InstanceImportTask(const QUrl sourceUrl, QWidget* parent) | |||||||
|  |  | ||||||
| bool InstanceImportTask::abort() | bool InstanceImportTask::abort() | ||||||
| { | { | ||||||
|  |     if (!canAbort()) | ||||||
|  |         return false; | ||||||
|  |  | ||||||
|     if (m_filesNetJob) |     if (m_filesNetJob) | ||||||
|         m_filesNetJob->abort(); |         m_filesNetJob->abort(); | ||||||
|     m_extractFuture.cancel(); |     m_extractFuture.cancel(); | ||||||
|  |  | ||||||
|     return false; |     return Task::abort(); | ||||||
| } | } | ||||||
|  |  | ||||||
| void InstanceImportTask::executeTask() | void InstanceImportTask::executeTask() | ||||||
| { | { | ||||||
|  |     setAbortStatus(true); | ||||||
|  |  | ||||||
|     if (m_sourceUrl.isLocalFile()) { |     if (m_sourceUrl.isLocalFile()) { | ||||||
|         m_archivePath = m_sourceUrl.toLocalFile(); |         m_archivePath = m_sourceUrl.toLocalFile(); | ||||||
|         processZipPack(); |         processZipPack(); | ||||||
| @@ -274,6 +279,7 @@ void InstanceImportTask::processFlame() | |||||||
|     connect(inst_creation_task, &Task::finished, inst_creation_task, &InstanceCreationTask::deleteLater); |     connect(inst_creation_task, &Task::finished, inst_creation_task, &InstanceCreationTask::deleteLater); | ||||||
|  |  | ||||||
|     connect(this, &Task::aborted, inst_creation_task, &InstanceCreationTask::abort); |     connect(this, &Task::aborted, inst_creation_task, &InstanceCreationTask::abort); | ||||||
|  |     connect(inst_creation_task, &Task::abortStatusChanged, this, &Task::setAbortStatus); | ||||||
|  |  | ||||||
|     inst_creation_task->start(); |     inst_creation_task->start(); | ||||||
| } | } | ||||||
| @@ -336,6 +342,7 @@ void InstanceImportTask::processModrinth() | |||||||
|     connect(inst_creation_task, &Task::finished, inst_creation_task, &InstanceCreationTask::deleteLater); |     connect(inst_creation_task, &Task::finished, inst_creation_task, &InstanceCreationTask::deleteLater); | ||||||
|  |  | ||||||
|     connect(this, &Task::aborted, inst_creation_task, &InstanceCreationTask::abort); |     connect(this, &Task::aborted, inst_creation_task, &InstanceCreationTask::abort); | ||||||
|  |     connect(inst_creation_task, &Task::abortStatusChanged, this, &Task::setAbortStatus); | ||||||
|  |  | ||||||
|     inst_creation_task->start(); |     inst_creation_task->start(); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -58,7 +58,6 @@ class InstanceImportTask : public InstanceTask | |||||||
| public: | public: | ||||||
|     explicit InstanceImportTask(const QUrl sourceUrl, QWidget* parent = nullptr); |     explicit InstanceImportTask(const QUrl sourceUrl, QWidget* parent = nullptr); | ||||||
|  |  | ||||||
|     bool canAbort() const override { return true; } |  | ||||||
|     bool abort() override; |     bool abort() override; | ||||||
|     const QVector<Flame::File> &getBlockedFiles() const |     const QVector<Flame::File> &getBlockedFiles() const | ||||||
|     { |     { | ||||||
|   | |||||||
| @@ -785,6 +785,7 @@ class InstanceStaging : public Task { | |||||||
|         connect(child, &Task::succeeded, this, &InstanceStaging::childSucceded); |         connect(child, &Task::succeeded, this, &InstanceStaging::childSucceded); | ||||||
|         connect(child, &Task::failed, this, &InstanceStaging::childFailed); |         connect(child, &Task::failed, this, &InstanceStaging::childFailed); | ||||||
|         connect(child, &Task::aborted, this, &InstanceStaging::childAborted); |         connect(child, &Task::aborted, this, &InstanceStaging::childAborted); | ||||||
|  |         connect(child, &Task::abortStatusChanged, this, &InstanceStaging::setAbortStatus); | ||||||
|         connect(child, &Task::status, this, &InstanceStaging::setStatus); |         connect(child, &Task::status, this, &InstanceStaging::setStatus); | ||||||
|         connect(child, &Task::progress, this, &InstanceStaging::setProgress); |         connect(child, &Task::progress, this, &InstanceStaging::setProgress); | ||||||
|         connect(&m_backoffTimer, &QTimer::timeout, this, &InstanceStaging::childSucceded); |         connect(&m_backoffTimer, &QTimer::timeout, this, &InstanceStaging::childSucceded); | ||||||
|   | |||||||
| @@ -27,6 +27,9 @@ static const FlameAPI api; | |||||||
|  |  | ||||||
| bool FlameCreationTask::abort() | bool FlameCreationTask::abort() | ||||||
| { | { | ||||||
|  |     if (!canAbort()) | ||||||
|  |         return false; | ||||||
|  |  | ||||||
|     if (m_process_update_file_info_job) |     if (m_process_update_file_info_job) | ||||||
|         m_process_update_file_info_job->abort(); |         m_process_update_file_info_job->abort(); | ||||||
|     if (m_files_job) |     if (m_files_job) | ||||||
| @@ -34,7 +37,7 @@ bool FlameCreationTask::abort() | |||||||
|     if (m_mod_id_resolver) |     if (m_mod_id_resolver) | ||||||
|         m_mod_id_resolver->abort(); |         m_mod_id_resolver->abort(); | ||||||
|  |  | ||||||
|     return true; |     return Task::abort(); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool FlameCreationTask::updateInstance() | bool FlameCreationTask::updateInstance() | ||||||
|   | |||||||
| @@ -19,9 +19,12 @@ | |||||||
|  |  | ||||||
| bool ModrinthCreationTask::abort() | bool ModrinthCreationTask::abort() | ||||||
| { | { | ||||||
|  |     if (!canAbort()) | ||||||
|  |         return false; | ||||||
|  |  | ||||||
|     if (m_files_job) |     if (m_files_job) | ||||||
|         return m_files_job->abort(); |         return m_files_job->abort(); | ||||||
|     return true; |     return Task::abort(); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ModrinthCreationTask::updateInstance() | bool ModrinthCreationTask::updateInstance() | ||||||
|   | |||||||
| @@ -22,7 +22,6 @@ class ModrinthCreationTask final : public InstanceCreationTask { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     bool abort() override; |     bool abort() override; | ||||||
|     bool canAbort() const override { return true; } |  | ||||||
|  |  | ||||||
|     bool updateInstance() override; |     bool updateInstance() override; | ||||||
|     bool createInstance() override; |     bool createInstance() override; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 flow
					flow