feat: Use a single progress dialog when doing multiple tasks

This puts all mod downloading tasks inside a SequentialTask, which is,
for more than one task, a multi step task. This is handled by the
ProgressDialog by showing both the global progress of tasks executed,
and the individual progress of each of them.
This commit is contained in:
flow
2022-04-01 09:10:51 -03:00
parent e22d54abd3
commit 9b8493c304
7 changed files with 172 additions and 105 deletions

View File

@ -9,13 +9,21 @@ class SequentialTask : public Task
{
Q_OBJECT
public:
explicit SequentialTask(QObject *parent = 0);
virtual ~SequentialTask() {};
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);
protected:
void executeTask();
protected slots:
void executeTask() override;
public slots:
bool abort() override;
private
slots:
@ -24,7 +32,19 @@ slots:
void subTaskStatus(const QString &msg);
void subTaskProgress(qint64 current, qint64 total);
signals:
void stepStatus(QString status);
private:
void setStepStatus(QString status) { m_step_status = status; };
private:
QString m_name;
QString m_step_status;
QQueue<Task::Ptr > m_queue;
int m_currentIndex;
qint64 m_stepProgress = 0;
qint64 m_stepTotalProgress = 100;
};