8#include <QtCore/QLoggingCategory>
9#include <QtCore/QObject>
11#include <QtNetwork/QNetworkReply>
12#include <QtNetwork/QNetworkRequest>
14class QNetworkAccessManager;
15class QAbstractNetworkCache;
68 Q_PROPERTY(qreal progress READ progress NOTIFY progressChanged FINAL)
71 Q_PROPERTY(
bool running READ isRunning NOTIFY runningChanged FINAL)
77 Q_PROPERTY(QUrl url READ url NOTIFY urlChanged FINAL)
80 Q_PROPERTY(QString localPath READ localPath NOTIFY localPathChanged FINAL)
83 Q_PROPERTY(qint64 totalBytes READ totalBytes NOTIFY totalBytesChanged FINAL)
86 Q_PROPERTY(qint64 bytesReceived READ bytesReceived NOTIFY bytesReceivedChanged FINAL)
89 Q_PROPERTY(
bool autoDecompress READ autoDecompress WRITE setAutoDecompress NOTIFY autoDecompressChanged FINAL)
92 Q_PROPERTY(QString outputPath READ outputPath WRITE setOutputPath NOTIFY outputPathChanged FINAL)
95 Q_PROPERTY(QString expectedHash READ expectedHash WRITE setExpectedHash NOTIFY expectedHashChanged FINAL)
114 qreal progress()
const {
return _progress; }
115 bool isRunning()
const {
116 return _state == State::Downloading || _state == State::Decompressing
117 || _state == State::Verifying;
119 QString
errorString()
const {
return _errorString; }
120 QUrl url()
const {
return _url; }
121 QString localPath()
const {
return _localPath; }
122 qint64 totalBytes()
const {
return _totalBytes; }
123 qint64 bytesReceived()
const {
return _bytesReceived; }
124 bool autoDecompress()
const {
return _autoDecompress; }
125 QString outputPath()
const {
return _outputPath; }
126 QString expectedHash()
const {
return _expectedHash; }
127 State state()
const {
return _state; }
128 bool lastResultFromCache()
const {
return _lastResultFromCache; }
131 void setAutoDecompress(
bool enabled);
132 void setOutputPath(
const QString &path);
133 void setExpectedHash(
const QString &hash);
136 void setCache(QAbstractNetworkCache *cache);
139 void setTimeout(
int timeoutMs);
142 QNetworkAccessManager *networkManager()
const {
return _networkManager; }
148 bool start(
const QString &remoteUrl);
197 void finished(
bool success,
const QString &localPath,
const QString &errorMessage);
206 void _onDownloadProgress(qint64 bytesReceived, qint64 totalBytes);
207 void _onDownloadFinished();
208 void _onDownloadError(QNetworkReply::NetworkError code);
209 void _onDecompressionFinished(
bool success);
213 void _setState(State newState);
214 void _setProgress(qreal progress);
215 void _setErrorString(
const QString &
error);
217 void _emitFinished(
bool success,
const QString &localPath,
const QString &errorMessage);
218 bool _writeReplyData(
const QByteArray &data);
219 bool _failForWriteError(
const QString &context);
220 QString _generateOutputPath(
const QString &remoteUrl)
const;
222 void _startDecompression();
224 QNetworkAccessManager *_networkManager =
nullptr;
225 QNetworkReply *_currentReply =
nullptr;
227 QFile *_outputFile =
nullptr;
232 QString _expectedHash;
233 QString _errorString;
234 QString _compressedFilePath;
236 qreal _progress = 0.0;
237 qint64 _totalBytes = -1;
238 qint64 _bytesReceived = 0;
241 State _state = State::Idle;
242 bool _autoDecompress =
false;
243 bool _finishEmitted =
false;
244 bool _lastResultFromCache =
false;
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
void finished(bool success, const QString &localPath, const QString &errorMessage)
void localPathChanged(const QString &localPath)
Emitted when local path changes.
void runningChanged(bool running)
Emitted when running state changes.
void totalBytesChanged(qint64 totalBytes)
Emitted when total bytes changes.
void stateChanged(State state)
Emitted when state changes.
void autoDecompressChanged(bool autoDecompress)
Emitted when auto-decompress setting changes.
void bytesReceivedChanged(qint64 bytesReceived)
Emitted when bytes received changes.
void errorStringChanged(const QString &errorString)
Emitted when error string changes.
void progressChanged(qreal progress)
Emitted when download progress changes.
void expectedHashChanged(const QString &expectedHash)
Emitted when expected hash setting changes.
void downloadProgress(qint64 bytesReceived, qint64 totalBytes)
Emitted during download with byte counts.
void outputPathChanged(const QString &outputPath)
Emitted when output path setting changes.
void urlChanged(const QUrl &url)
Emitted when URL changes.
void decompressionProgress(qreal progress)
Emitted during decompression (0.0 to 1.0)
constexpr int kDefaultTimeoutMs
Default request timeout in milliseconds.
Common request configuration options.