QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
QGCCompressionJob.h
Go to the documentation of this file.
1#pragma once
2
5
6#include "QGCCompression.h"
7
8#include <atomic>
9#include <memory>
10#include <QtCore/QFuture>
11#include <QtCore/QFutureWatcher>
12#include <QtCore/QLoggingCategory>
13#include <QtCore/QObject>
14
15Q_DECLARE_LOGGING_CATEGORY(QGCCompressionJobLog)
16
17
60class QGCCompressionJob : public QObject
61{
62 Q_OBJECT
63 Q_DISABLE_COPY_MOVE(QGCCompressionJob)
64
65
66 Q_PROPERTY(qreal progress READ progress NOTIFY progressChanged FINAL)
67
68
69 Q_PROPERTY(bool running READ isRunning NOTIFY runningChanged FINAL)
70
71
72 Q_PROPERTY(QString errorString READ errorString NOTIFY errorStringChanged FINAL)
73
74
75 Q_PROPERTY(QString sourcePath READ sourcePath NOTIFY sourcePathChanged FINAL)
76
77
78 Q_PROPERTY(QString outputPath READ outputPath NOTIFY outputPathChanged FINAL)
79
80public:
82 enum class Operation {
83 None,
84 ExtractArchive,
85 ExtractArchiveAtomic,
86 DecompressFile,
87 ExtractFile,
88 ExtractFiles
89 };
90 Q_ENUM(Operation)
91
92 explicit QGCCompressionJob(QObject *parent = nullptr);
93 ~QGCCompressionJob() override;
94
95 // Property getters
96 qreal progress() const { return _progress; }
97 bool isRunning() const { return _running; }
98 QString errorString() const { return _errorString; }
99 QString sourcePath() const { return _sourcePath; }
100 QString outputPath() const { return _outputPath; }
101
103 Operation currentOperation() const { return _operation; }
104
107 QFuture<bool> future() const { return _future; }
108
109 // ========================================================================
110 // Static Async Methods (return QFuture directly)
111 // ========================================================================
112
118 static QFuture<bool> extractArchiveAsync(const QString &archivePath,
119 const QString &outputDirectoryPath,
120 qint64 maxBytes = 0);
121
127 static QFuture<bool> decompressFileAsync(const QString &inputPath,
128 const QString &outputPath = QString(),
129 qint64 maxBytes = 0);
130
131public slots:
136 void extractArchive(const QString &archivePath, const QString &outputDirectoryPath,
137 qint64 maxBytes = 0);
138
143 void extractArchiveAtomic(const QString &archivePath, const QString &outputDirectoryPath,
144 qint64 maxBytes = 0);
145
150 void decompressFile(const QString &inputPath, const QString &outputPath = QString(),
151 qint64 maxBytes = 0);
152
157 void extractFile(const QString &archivePath, const QString &fileName,
158 const QString &outputPath);
159
164 void extractFiles(const QString &archivePath, const QStringList &fileNames,
165 const QString &outputDirectoryPath);
166
168 void cancel();
169
170signals:
172 void progressChanged(qreal progress);
173
175 void runningChanged(bool running);
176
179 void finished(bool success);
180
182 void errorStringChanged(const QString &errorString);
183
185 void sourcePathChanged(const QString &sourcePath);
186
188 void outputPathChanged(const QString &outputPath);
189
190private slots:
191 void _onProgressValueChanged(int progressValue);
192 void _onFutureFinished();
193
194private:
195 using WorkFunction = std::function<bool(QGCCompression::ProgressCallback)>;
196
197 void _startOperation(Operation op, const QString &source, const QString &output,
198 WorkFunction work);
199 void _setProgress(qreal progress);
200 void _setRunning(bool running);
201 void _setErrorString(const QString &error);
202
203 static QFuture<bool> _runWithProgress(WorkFunction work,
204 const std::shared_ptr<std::atomic_bool> &cancelRequested);
205
206 QFutureWatcher<bool> *_watcher = nullptr;
207 QFuture<bool> _future;
208
209 qreal _progress = 0.0;
210 bool _running = false;
211 QString _errorString;
212 QString _sourcePath;
213 QString _outputPath;
214 Operation _operation = Operation::None;
215 std::shared_ptr<std::atomic_bool> _cancelRequested;
216};
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
QString errorString
Error error
void runningChanged(bool running)
Emitted when running state changes.
void progressChanged(qreal progress)
Emitted when progress changes (0.0 to 1.0)
void errorStringChanged(const QString &errorString)
Emitted when error string changes.
void sourcePathChanged(const QString &sourcePath)
Emitted when source path changes.
void finished(bool success)
void outputPathChanged(const QString &outputPath)
Emitted when output path changes.
std::function< bool(qint64 bytesProcessed, qint64 totalBytes)> ProgressCallback