aboutsummaryrefslogtreecommitdiff
path: root/launcher/tasks
diff options
context:
space:
mode:
authorflow <thiagodonato300@gmail.com>2022-05-09 10:53:52 -0300
committerflow <flowlnlnln@gmail.com>2022-07-17 11:33:41 -0300
commit882c82f82c0f5a3b634c5784d0968174cfdb8960 (patch)
tree79bbf836a094aa7e12818c72e4c56ab9f923f23e /launcher/tasks
parent43b9db6e45a2ea74384f7851722952b9a1547213 (diff)
downloadPrismLauncher-882c82f82c0f5a3b634c5784d0968174cfdb8960.tar.gz
PrismLauncher-882c82f82c0f5a3b634c5784d0968174cfdb8960.tar.bz2
PrismLauncher-882c82f82c0f5a3b634c5784d0968174cfdb8960.zip
fix: always update global progress of sequential tasks
Previously, it would not update the global counter if the subTask didn't update its progress, even though progress was being made. This also prevents a segmentation fault while aborting the task. Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher/tasks')
-rw-r--r--launcher/tasks/SequentialTask.cpp20
-rw-r--r--launcher/tasks/SequentialTask.h2
2 files changed, 16 insertions, 6 deletions
diff --git a/launcher/tasks/SequentialTask.cpp b/launcher/tasks/SequentialTask.cpp
index 7f03ad2e..f1e1a889 100644
--- a/launcher/tasks/SequentialTask.cpp
+++ b/launcher/tasks/SequentialTask.cpp
@@ -1,5 +1,7 @@
#include "SequentialTask.h"
+#include <QDebug>
+
SequentialTask::SequentialTask(QObject* parent, const QString& task_name) : Task(parent), m_name(task_name), m_currentIndex(-1) {}
SequentialTask::~SequentialTask()
@@ -39,14 +41,15 @@ bool SequentialTask::abort()
emit aborted();
emit finished();
}
- m_queue.clear();
+
+ m_aborted = true;
return true;
}
bool succeeded = m_queue[m_currentIndex]->abort();
- m_queue.clear();
+ m_aborted = succeeded;
- if(succeeded)
+ if (succeeded)
emitAborted();
return succeeded;
@@ -54,10 +57,14 @@ bool SequentialTask::abort()
void SequentialTask::startNext()
{
- if (m_currentIndex != -1) {
- Task::Ptr previous = m_queue[m_currentIndex];
+ if (m_aborted)
+ return;
+
+ if (m_currentIndex != -1 && m_currentIndex < m_queue.size()) {
+ Task::Ptr previous = m_queue.at(m_currentIndex);
disconnect(previous.get(), 0, this, 0);
}
+
m_currentIndex++;
if (m_queue.isEmpty() || m_currentIndex >= m_queue.size()) {
emitSucceeded();
@@ -76,6 +83,8 @@ void SequentialTask::startNext()
setStatus(tr("Executing task %1 out of %2").arg(m_currentIndex + 1).arg(m_queue.size()));
setStepStatus(next->isMultiStep() ? next->getStepStatus() : next->getStatus());
+ setProgress(m_currentIndex + 1, m_queue.count());
+
next->start();
}
@@ -93,7 +102,6 @@ void SequentialTask::subTaskProgress(qint64 current, qint64 total)
setProgress(0, 100);
return;
}
- setProgress(m_currentIndex + 1, m_queue.count());
m_stepProgress = current;
m_stepTotalProgress = total;
diff --git a/launcher/tasks/SequentialTask.h b/launcher/tasks/SequentialTask.h
index e10cb6f7..942ebec2 100644
--- a/launcher/tasks/SequentialTask.h
+++ b/launcher/tasks/SequentialTask.h
@@ -44,4 +44,6 @@ protected:
qint64 m_stepProgress = 0;
qint64 m_stepTotalProgress = 100;
+
+ bool m_aborted = false;
};