aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/filestreamer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/utils/filestreamer.h')
-rw-r--r--src/libs/utils/filestreamer.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/libs/utils/filestreamer.h b/src/libs/utils/filestreamer.h
new file mode 100644
index 0000000000..a5b6ff4f25
--- /dev/null
+++ b/src/libs/utils/filestreamer.h
@@ -0,0 +1,63 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "utils_global.h"
+
+#include "filepath.h"
+
+#include <solutions/tasking/tasktree.h>
+
+#include <QObject>
+
+QT_BEGIN_NAMESPACE
+class QByteArray;
+QT_END_NAMESPACE
+
+namespace Utils {
+
+enum class StreamMode { Reader, Writer, Transfer };
+
+enum class StreamResult { FinishedWithSuccess, FinishedWithError };
+
+class QTCREATOR_UTILS_EXPORT FileStreamer final : public QObject
+{
+ Q_OBJECT
+
+public:
+ FileStreamer(QObject *parent = nullptr);
+ ~FileStreamer();
+
+ void setSource(const FilePath &source);
+ void setDestination(const FilePath &destination);
+ void setStreamMode(StreamMode mode); // Transfer by default
+
+ // Only for Reader mode
+ QByteArray readData() const;
+ // Only for Writer mode
+ void setWriteData(const QByteArray &writeData);
+
+ StreamResult result() const;
+
+ void start();
+ void stop();
+
+signals:
+ void done();
+
+private:
+ class FileStreamerPrivate *d = nullptr;
+};
+
+class FileStreamerTaskAdapter : public Tasking::TaskAdapter<FileStreamer>
+{
+public:
+ FileStreamerTaskAdapter() { connect(task(), &FileStreamer::done, this,
+ [this] { emit done(task()->result() == StreamResult::FinishedWithSuccess); }); }
+ void start() override { task()->start(); }
+};
+
+} // namespace Utils
+
+TASKING_DECLARE_TASK(FileStreamerTask, Utils::FileStreamerTaskAdapter);