forked from qt-creator/qt-creator
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:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user