66 Q_PROPERTY(qreal progress READ progress NOTIFY progressChanged FINAL)
69 Q_PROPERTY(
bool running READ isRunning NOTIFY runningChanged FINAL)
75 Q_PROPERTY(QString sourcePath READ sourcePath NOTIFY sourcePathChanged FINAL)
78 Q_PROPERTY(QString outputPath READ outputPath NOTIFY outputPathChanged FINAL)
82 enum class Operation {
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; }
103 Operation currentOperation()
const {
return _operation; }
107 QFuture<bool> future()
const {
return _future; }
118 static QFuture<bool> extractArchiveAsync(
const QString &archivePath,
119 const QString &outputDirectoryPath,
120 qint64 maxBytes = 0);
127 static QFuture<bool> decompressFileAsync(
const QString &inputPath,
128 const QString &outputPath = QString(),
129 qint64 maxBytes = 0);
136 void extractArchive(
const QString &archivePath,
const QString &outputDirectoryPath,
137 qint64 maxBytes = 0);
143 void extractArchiveAtomic(
const QString &archivePath,
const QString &outputDirectoryPath,
144 qint64 maxBytes = 0);
150 void decompressFile(
const QString &inputPath,
const QString &outputPath = QString(),
151 qint64 maxBytes = 0);
157 void extractFile(
const QString &archivePath,
const QString &fileName,
158 const QString &outputPath);
164 void extractFiles(
const QString &archivePath,
const QStringList &fileNames,
165 const QString &outputDirectoryPath);
191 void _onProgressValueChanged(
int progressValue);
192 void _onFutureFinished();
197 void _startOperation(Operation op,
const QString &source,
const QString &output,
199 void _setProgress(qreal progress);
200 void _setRunning(
bool running);
201 void _setErrorString(
const QString &
error);
203 static QFuture<bool> _runWithProgress(WorkFunction work,
204 const std::shared_ptr<std::atomic_bool> &cancelRequested);
206 QFutureWatcher<bool> *_watcher =
nullptr;
207 QFuture<bool> _future;
209 qreal _progress = 0.0;
210 bool _running =
false;
211 QString _errorString;
214 Operation _operation = Operation::None;
215 std::shared_ptr<std::atomic_bool> _cancelRequested;