diff options
Diffstat (limited to 'api/logic/launch/steps')
-rw-r--r-- | api/logic/launch/steps/Update.cpp | 32 | ||||
-rw-r--r-- | api/logic/launch/steps/Update.h | 16 |
2 files changed, 40 insertions, 8 deletions
diff --git a/api/logic/launch/steps/Update.cpp b/api/logic/launch/steps/Update.cpp index 4901f001..ad0c4fc4 100644 --- a/api/logic/launch/steps/Update.cpp +++ b/api/logic/launch/steps/Update.cpp @@ -18,7 +18,12 @@ void Update::executeTask() { - m_updateTask = m_parent->instance()->createUpdateTask(); + if(m_aborted) + { + emitFailed(tr("Task aborted.")); + return; + } + m_updateTask.reset(m_parent->instance()->createUpdateTask()); if(m_updateTask) { connect(m_updateTask.get(), SIGNAL(finished()), this, SLOT(updateFinished())); @@ -39,12 +44,37 @@ void Update::updateFinished() { if(m_updateTask->successful()) { + m_updateTask.reset(); emitSucceeded(); } else { QString reason = tr("Instance update failed because: %1.\n\n").arg(m_updateTask->failReason()); + m_updateTask.reset(); emit logLine(reason, MessageLevel::Fatal); emitFailed(reason); } } + +bool Update::canAbort() const +{ + if(m_updateTask) + { + return m_updateTask->canAbort(); + } + return true; +} + + +bool Update::abort() +{ + m_aborted = true; + if(m_updateTask) + { + if(m_updateTask->canAbort()) + { + return m_updateTask->abort(); + } + } + return true; +} diff --git a/api/logic/launch/steps/Update.h b/api/logic/launch/steps/Update.h index 14928253..1739de47 100644 --- a/api/logic/launch/steps/Update.h +++ b/api/logic/launch/steps/Update.h @@ -16,6 +16,7 @@ #pragma once #include <launch/LaunchStep.h> +#include <QObjectPtr.h> #include <launch/LoggedProcess.h> #include <java/JavaChecker.h> @@ -27,15 +28,16 @@ public: explicit Update(LaunchTask *parent):LaunchStep(parent) {}; virtual ~Update() {}; - virtual void executeTask(); - virtual bool canAbort() const - { - return false; - } - virtual void proceed(); + void executeTask() override; + bool canAbort() const override; + void proceed() override; +public slots: + bool abort() override; + private slots: void updateFinished(); private: - std::shared_ptr<Task> m_updateTask; + shared_qobject_ptr<Task> m_updateTask; + bool m_aborted = false; }; |