FileStreamer: Reuse TaskTreeRunner

Change-Id: I3ea6f07f18fa8a326325d41bf771b85e7e8165ee
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2024-01-13 12:50:23 +01:00
parent 7e7318d47d
commit 781ca08207

View File

@@ -7,6 +7,7 @@
#include "process.h" #include "process.h"
#include <solutions/tasking/barrier.h> #include <solutions/tasking/barrier.h>
#include <solutions/tasking/tasktreerunner.h>
#include <QFile> #include <QFile>
#include <QMutex> #include <QMutex>
@@ -26,17 +27,16 @@ class FileStreamBase : public QObject
Q_OBJECT Q_OBJECT
public: public:
void setFilePath(const FilePath &filePath) { m_filePath = filePath; } FileStreamBase()
void start() { {
QTC_ASSERT(!m_taskTree, return); connect(&m_taskTreeRunner, &TaskTreeRunner::done, this, [this](DoneWith result) {
const GroupItem task = m_filePath.needsDevice() ? remoteTask() : localTask();
m_taskTree.reset(new TaskTree({task}));
connect(m_taskTree.get(), &TaskTree::done, this, [this](DoneWith result) {
m_taskTree.release()->deleteLater();
emit done(toDoneResult(result == DoneWith::Success)); emit done(toDoneResult(result == DoneWith::Success));
}); });
m_taskTree->start(); }
void setFilePath(const FilePath &filePath) { m_filePath = filePath; }
void start() {
QTC_ASSERT(!m_taskTreeRunner.isRunning(), return);
m_taskTreeRunner.start({m_filePath.needsDevice() ? remoteTask() : localTask()});
} }
signals: signals:
@@ -44,7 +44,7 @@ signals:
protected: protected:
FilePath m_filePath; FilePath m_filePath;
std::unique_ptr<TaskTree> m_taskTree; TaskTreeRunner m_taskTreeRunner;
private: private:
virtual GroupItem remoteTask() = 0; virtual GroupItem remoteTask() = 0;
@@ -229,17 +229,17 @@ public:
} }
void setWriteData(const QByteArray &writeData) { void setWriteData(const QByteArray &writeData) {
QTC_ASSERT(!m_taskTree, return); QTC_ASSERT(!m_taskTreeRunner.isRunning(), return);
m_writeData = writeData; m_writeData = writeData;
} }
void write(const QByteArray &newData) { void write(const QByteArray &newData) {
QTC_ASSERT(m_taskTree, return); QTC_ASSERT(m_taskTreeRunner.isRunning(), return);
QTC_ASSERT(m_writeData.isEmpty(), return); QTC_ASSERT(m_writeData.isEmpty(), return);
QTC_ASSERT(m_writeBuffer, return); QTC_ASSERT(m_writeBuffer, return);
m_writeBuffer->write(newData); m_writeBuffer->write(newData);
} }
void closeWriteChannel() { void closeWriteChannel() {
QTC_ASSERT(m_taskTree, return); QTC_ASSERT(m_taskTreeRunner.isRunning(), return);
QTC_ASSERT(m_writeData.isEmpty(), return); QTC_ASSERT(m_writeData.isEmpty(), return);
QTC_ASSERT(m_writeBuffer, return); QTC_ASSERT(m_writeBuffer, return);
m_writeBuffer->closeWriteChannel(); m_writeBuffer->closeWriteChannel();
@@ -382,7 +382,7 @@ public:
QByteArray m_readBuffer; QByteArray m_readBuffer;
QByteArray m_writeBuffer; QByteArray m_writeBuffer;
DoneResult m_streamResult = DoneResult::Error; DoneResult m_streamResult = DoneResult::Error;
std::unique_ptr<TaskTree> m_taskTree; TaskTreeRunner m_taskTreeRunner;
GroupItem task() { GroupItem task() {
if (m_streamerMode == StreamMode::Reader) if (m_streamerMode == StreamMode::Reader)
@@ -422,6 +422,10 @@ FileStreamer::FileStreamer(QObject *parent)
: QObject(parent) : QObject(parent)
, d(new FileStreamerPrivate) , d(new FileStreamerPrivate)
{ {
connect(&d->m_taskTreeRunner, &TaskTreeRunner::done, this, [this](DoneWith result) {
d->m_streamResult = toDoneResult(result == DoneWith::Success);
emit done();
});
} }
FileStreamer::~FileStreamer() FileStreamer::~FileStreamer()
@@ -462,19 +466,13 @@ DoneResult FileStreamer::result() const
void FileStreamer::start() void FileStreamer::start()
{ {
// TODO: Preliminary check if local source exists? // TODO: Preliminary check if local source exists?
QTC_ASSERT(!d->m_taskTree, return); QTC_ASSERT(!d->m_taskTreeRunner.isRunning(), return);
d->m_taskTree.reset(new TaskTree({d->task()})); d->m_taskTreeRunner.start({d->task()});
connect(d->m_taskTree.get(), &TaskTree::done, this, [this](DoneWith result) {
d->m_streamResult = toDoneResult(result == DoneWith::Success);
d->m_taskTree.release()->deleteLater();
emit done();
});
d->m_taskTree->start();
} }
void FileStreamer::stop() void FileStreamer::stop()
{ {
d->m_taskTree.reset(); d->m_taskTreeRunner.reset();
} }
} // namespace Utils } // namespace Utils