aboutsummaryrefslogtreecommitdiff
path: root/launcher/tasks
diff options
context:
space:
mode:
authorflow <flowlnlnln@gmail.com>2022-12-15 13:46:51 -0300
committerflow <flowlnlnln@gmail.com>2022-12-15 13:48:53 -0300
commitb0c866bfaa8e784bb89d25fd4a847686e11c3ab5 (patch)
tree2b683f6707f8f181725fdb50d3e68aba37c8a3f5 /launcher/tasks
parentdd578354c448dbb92b12438886d80ac6c0c0bea7 (diff)
downloadPrismLauncher-b0c866bfaa8e784bb89d25fd4a847686e11c3ab5.tar.gz
PrismLauncher-b0c866bfaa8e784bb89d25fd4a847686e11c3ab5.tar.bz2
PrismLauncher-b0c866bfaa8e784bb89d25fd4a847686e11c3ab5.zip
feat(Tasks): allow adding subtasks while running in ConcurrentTask
Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher/tasks')
-rw-r--r--launcher/tasks/ConcurrentTask.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/launcher/tasks/ConcurrentTask.cpp b/launcher/tasks/ConcurrentTask.cpp
index bc3cf4d3..8f688f07 100644
--- a/launcher/tasks/ConcurrentTask.cpp
+++ b/launcher/tasks/ConcurrentTask.cpp
@@ -27,10 +27,8 @@ auto ConcurrentTask::getStepTotalProgress() const -> qint64
void ConcurrentTask::addTask(Task::Ptr task)
{
- if (!isRunning())
- m_queue.append(task);
- else
- qWarning() << "Tried to add a task to a running concurrent task!";
+ m_queue.append(task);
+ m_total_size += 1;
}
void ConcurrentTask::executeTask()
@@ -117,9 +115,14 @@ void ConcurrentTask::startNext()
setStepStatus(next->isMultiStep() ? next->getStepStatus() : next->getStatus());
updateState();
- QCoreApplication::processEvents();
+ QMetaObject::invokeMethod(next.get(), &Task::start, Qt::QueuedConnection);
- next->start();
+ // Allow going up the number of concurrent tasks in case of tasks being added in the middle of a running task.
+ int num_starts = m_total_max_size - m_doing.size();
+ for (int i = 0; i < num_starts; i++)
+ QMetaObject::invokeMethod(this, &ConcurrentTask::startNext, Qt::QueuedConnection);
+
+ QCoreApplication::processEvents();
}
void ConcurrentTask::subTaskSucceeded(Task::Ptr task)