diff options
author | flow <flowlnlnln@gmail.com> | 2022-06-12 13:30:09 -0300 |
---|---|---|
committer | flow <flowlnlnln@gmail.com> | 2022-08-28 16:29:01 -0300 |
commit | e89969991868b05723ae87454d4e22e370137d15 (patch) | |
tree | 0c90f77449342370fbe4d8b4dcc101674d591935 /launcher/tasks/SequentialTask.h | |
parent | bdf464e792f4b0c8a20f92a9073699c5fd98cd46 (diff) | |
download | PrismLauncher-e89969991868b05723ae87454d4e22e370137d15.tar.gz PrismLauncher-e89969991868b05723ae87454d4e22e370137d15.tar.bz2 PrismLauncher-e89969991868b05723ae87454d4e22e370137d15.zip |
refactor: make SequentialTask inherit from ConcurrentTask
In a way, sequential tasks are just concurrent tasks with only a single
task running concurrently, so we can remove LOTS of duplicated logic :)
Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher/tasks/SequentialTask.h')
-rw-r--r-- | launcher/tasks/SequentialTask.h | 60 |
1 files changed, 16 insertions, 44 deletions
diff --git a/launcher/tasks/SequentialTask.h b/launcher/tasks/SequentialTask.h index f5a58b1b..5eace96e 100644 --- a/launcher/tasks/SequentialTask.h +++ b/launcher/tasks/SequentialTask.h @@ -1,49 +1,21 @@ #pragma once -#include "Task.h" -#include "QObjectPtr.h" - -#include <QQueue> - -class SequentialTask : public Task -{ +#include "ConcurrentTask.h" + +/** A concurrent task that only allows one concurrent task :) + * + * This should be used when there's a need to maintain a strict ordering of task executions, and + * the starting of a task is contingent on the success of the previous one. + * + * See MultipleOptionsTask if that's not the case. + */ +class SequentialTask : public ConcurrentTask { Q_OBJECT -public: - explicit SequentialTask(QObject *parent = nullptr, const QString& task_name = ""); - virtual ~SequentialTask(); - - inline auto isMultiStep() const -> bool override { return m_queue.size() > 1; }; - auto getStepProgress() const -> qint64 override; - auto getStepTotalProgress() const -> qint64 override; - - inline auto getStepStatus() const -> QString override { return m_step_status; } - - void addTask(Task::Ptr task); - -public slots: - bool abort() override; - -protected -slots: - void executeTask() override; - - virtual void startNext(); - virtual void subTaskFailed(const QString &msg); - virtual void subTaskStatus(const QString &msg); - virtual void subTaskProgress(qint64 current, qint64 total); - -protected: - void setStepStatus(QString status) { m_step_status = status; emit stepStatus(status); }; - -protected: - QString m_name; - QString m_step_status; - - QQueue<Task::Ptr > m_queue; - int m_currentIndex; - - qint64 m_stepProgress = 0; - qint64 m_stepTotalProgress = 100; + public: + explicit SequentialTask(QObject* parent = nullptr, QString task_name = ""); + ~SequentialTask() override = default; - bool m_aborted = false; + protected: + void startNext() override; + void updateState() override; }; |