feat: make Task a QRunnable

This makes it possible to run a task in another thread.

I added a variable to toggle debug prints because they seem to trigger
an assertion on Qt internals when the task in on another thread. Of
course, this isn't awesome, but can wait until we improve our logging.

Signed-off-by: flow <flowlnlnln@gmail.com>
This commit is contained in:
flow
2022-08-09 01:26:53 -03:00
parent 2dcff83be7
commit 2d63c86022
2 changed files with 26 additions and 10 deletions

View File

@ -35,9 +35,11 @@
#pragma once
#include <QRunnable>
#include "QObjectPtr.h"
class Task : public QObject {
class Task : public QObject, public QRunnable {
Q_OBJECT
public:
using Ptr = shared_qobject_ptr<Task>;
@ -45,7 +47,7 @@ class Task : public QObject {
enum class State { Inactive, Running, Succeeded, Failed, AbortedByUser };
public:
explicit Task(QObject* parent = 0);
explicit Task(QObject* parent = 0, bool show_debug_log = true);
virtual ~Task() = default;
bool isRunning() const;
@ -95,6 +97,9 @@ class Task : public QObject {
void stepStatus(QString status);
public slots:
// QRunnable's interface
void run() override { start(); }
virtual void start();
virtual bool abort() { if(canAbort()) emitAborted(); return canAbort(); };
@ -117,4 +122,7 @@ class Task : public QObject {
QString m_status;
int m_progress = 0;
int m_progressTotal = 100;
// TODO: Nuke in favor of QLoggingCategory
bool m_show_debug = true;
};