summaryrefslogtreecommitdiff
path: root/daemon/uploadmanager.cpp
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2014-12-13 00:24:07 +0100
committerJavier <dev.git@javispedro.com>2014-12-13 00:24:07 +0100
commite0fdb8c0f36fc78d3f445c3a218902bc132a33ec (patch)
treec7996c54657a0062dbe3ceeba0bafdacc71c6023 /daemon/uploadmanager.cpp
parent492a861a47c5165cf62a051303d4b45e5d5630cd (diff)
progress reporting callbacks in uploadmanager
Diffstat (limited to 'daemon/uploadmanager.cpp')
-rw-r--r--daemon/uploadmanager.cpp30
1 files changed, 20 insertions, 10 deletions
diff --git a/daemon/uploadmanager.cpp b/daemon/uploadmanager.cpp
index 29c436e..5976fe6 100644
--- a/daemon/uploadmanager.cpp
+++ b/daemon/uploadmanager.cpp
@@ -21,7 +21,7 @@ UploadManager::UploadManager(WatchConnector *watch, QObject *parent) :
}
uint UploadManager::upload(WatchConnector::UploadType type, int index, const QString &filename, QIODevice *device, int size,
- SuccessCallback successCallback, ErrorCallback errorCallback)
+ SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback)
{
PendingUpload upload;
upload.id = ++_lastUploadId;
@@ -30,12 +30,14 @@ uint UploadManager::upload(WatchConnector::UploadType type, int index, const QSt
upload.filename = filename;
upload.device = device;
if (size < 0) {
- upload.remaining = device->size();
+ upload.size = device->size();
} else {
- upload.remaining = size;
+ upload.size = size;
}
+ upload.remaining = upload.size;
upload.successCallback = successCallback;
upload.errorCallback = errorCallback;
+ upload.progressCallback = progressCallback;
if (upload.remaining <= 0) {
logger()->warn() << "upload is empty";
@@ -54,20 +56,20 @@ uint UploadManager::upload(WatchConnector::UploadType type, int index, const QSt
return upload.id;
}
-uint UploadManager::uploadAppBinary(int slot, QIODevice *device, SuccessCallback successCallback, ErrorCallback errorCallback)
+uint UploadManager::uploadAppBinary(int slot, QIODevice *device, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback)
{
- return upload(WatchConnector::uploadBINARY, slot, QString(), device, -1, successCallback, errorCallback);
+ return upload(WatchConnector::uploadBINARY, slot, QString(), device, -1, successCallback, errorCallback, progressCallback);
}
-uint UploadManager::uploadAppResources(int slot, QIODevice *device, SuccessCallback successCallback, ErrorCallback errorCallback)
+uint UploadManager::uploadAppResources(int slot, QIODevice *device, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback)
{
- return upload(WatchConnector::uploadRESOURCES, slot, QString(), device, -1, successCallback, errorCallback);
+ return upload(WatchConnector::uploadRESOURCES, slot, QString(), device, -1, successCallback, errorCallback, progressCallback);
}
-uint UploadManager::uploadFile(const QString &filename, QIODevice *device, SuccessCallback successCallback, ErrorCallback errorCallback)
+uint UploadManager::uploadFile(const QString &filename, QIODevice *device, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback)
{
Q_ASSERT(!filename.isEmpty());
- return upload(WatchConnector::uploadFILE, 0, filename, device, -1, successCallback, errorCallback);
+ return upload(WatchConnector::uploadFILE, 0, filename, device, -1, successCallback, errorCallback, progressCallback);
}
void UploadManager::cancel(uint id, int code)
@@ -181,6 +183,10 @@ void UploadManager::handleMessage(const QByteArray &msg)
/* fallthrough */
case StateInProgress:
logger()->debug() << "moving to the next chunk";
+ if (upload.progressCallback) {
+ // Report that the previous chunk has been succesfully uploaded
+ upload.progressCallback(1.0 - (qreal(upload.remaining) / upload.size));
+ }
if (upload.remaining > 0) {
if (!uploadNextChunk(upload)) {
cancel(upload.id, -1);
@@ -197,6 +203,10 @@ void UploadManager::handleMessage(const QByteArray &msg)
break;
case StateCommit:
logger()->debug() << "commited succesfully";
+ if (upload.progressCallback) {
+ // Report that all chunks have been succesfully uploaded
+ upload.progressCallback(1.0);
+ }
_state = StateComplete;
if (!complete(upload)) {
cancel(upload.id, -1);
@@ -248,7 +258,7 @@ bool UploadManager::uploadNextChunk(PendingUpload &upload)
upload.remaining -= chunk.size();
upload.crc.addData(chunk);
- logger()->debug() << "remaining" << upload.remaining << "bytes";
+ logger()->debug() << "remaining" << upload.remaining << "/" << upload.size << "bytes";
return true;
}