From 781ca0820705da11d849e18aa10e5d948d360cf4 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Sat, 13 Jan 2024 12:50:23 +0100 Subject: [PATCH] FileStreamer: Reuse TaskTreeRunner Change-Id: I3ea6f07f18fa8a326325d41bf771b85e7e8165ee Reviewed-by: Reviewed-by: hjk --- src/libs/utils/filestreamer.cpp | 44 ++++++++++++++++----------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/src/libs/utils/filestreamer.cpp b/src/libs/utils/filestreamer.cpp index 053d5dfc312..2fd40079242 100644 --- a/src/libs/utils/filestreamer.cpp +++ b/src/libs/utils/filestreamer.cpp @@ -7,6 +7,7 @@ #include "process.h" #include +#include #include #include @@ -26,17 +27,16 @@ class FileStreamBase : public QObject Q_OBJECT public: - void setFilePath(const FilePath &filePath) { m_filePath = filePath; } - void start() { - QTC_ASSERT(!m_taskTree, return); - - 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(); + FileStreamBase() + { + connect(&m_taskTreeRunner, &TaskTreeRunner::done, this, [this](DoneWith result) { 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: @@ -44,7 +44,7 @@ signals: protected: FilePath m_filePath; - std::unique_ptr m_taskTree; + TaskTreeRunner m_taskTreeRunner; private: virtual GroupItem remoteTask() = 0; @@ -229,17 +229,17 @@ public: } void setWriteData(const QByteArray &writeData) { - QTC_ASSERT(!m_taskTree, return); + QTC_ASSERT(!m_taskTreeRunner.isRunning(), return); m_writeData = writeData; } 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_writeBuffer, return); m_writeBuffer->write(newData); } void closeWriteChannel() { - QTC_ASSERT(m_taskTree, return); + QTC_ASSERT(m_taskTreeRunner.isRunning(), return); QTC_ASSERT(m_writeData.isEmpty(), return); QTC_ASSERT(m_writeBuffer, return); m_writeBuffer->closeWriteChannel(); @@ -382,7 +382,7 @@ public: QByteArray m_readBuffer; QByteArray m_writeBuffer; DoneResult m_streamResult = DoneResult::Error; - std::unique_ptr m_taskTree; + TaskTreeRunner m_taskTreeRunner; GroupItem task() { if (m_streamerMode == StreamMode::Reader) @@ -422,6 +422,10 @@ FileStreamer::FileStreamer(QObject *parent) : QObject(parent) , d(new FileStreamerPrivate) { + connect(&d->m_taskTreeRunner, &TaskTreeRunner::done, this, [this](DoneWith result) { + d->m_streamResult = toDoneResult(result == DoneWith::Success); + emit done(); + }); } FileStreamer::~FileStreamer() @@ -462,19 +466,13 @@ DoneResult FileStreamer::result() const void FileStreamer::start() { // TODO: Preliminary check if local source exists? - QTC_ASSERT(!d->m_taskTree, return); - d->m_taskTree.reset(new TaskTree({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(); + QTC_ASSERT(!d->m_taskTreeRunner.isRunning(), return); + d->m_taskTreeRunner.start({d->task()}); } void FileStreamer::stop() { - d->m_taskTree.reset(); + d->m_taskTreeRunner.reset(); } } // namespace Utils