From 4abac35c721198556c9d3c293774b58b808f45ef Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Mon, 12 Oct 2015 14:51:28 -0700 Subject: [PATCH] Cache on upload --- libraries/networking/src/AssetUpload.cpp | 16 ++++++++++++---- libraries/networking/src/AssetUpload.h | 3 ++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/libraries/networking/src/AssetUpload.cpp b/libraries/networking/src/AssetUpload.cpp index 92632a43e5..67c079d248 100644 --- a/libraries/networking/src/AssetUpload.cpp +++ b/libraries/networking/src/AssetUpload.cpp @@ -23,9 +23,9 @@ AssetUpload::AssetUpload(QObject* object, const QString& filename) : } -void AssetUpload::start() { +void AssetUpload::start(bool cacheOnSuccess) { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "start", Qt::AutoConnection); + QMetaObject::invokeMethod(this, "start", Q_ARG(bool, cacheOnSuccess)); return; } @@ -37,14 +37,16 @@ void AssetUpload::start() { // file opened, read the data and grab the extension _extension = QFileInfo(_filename).suffix(); - auto data = file.readAll(); + _data = file.readAll(); // ask the AssetClient to upload the asset and emit the proper signals from the passed callback auto assetClient = DependencyManager::get(); qCDebug(asset_client) << "Attempting to upload" << _filename << "to asset-server."; - assetClient->uploadAsset(data, _extension, [this](bool responseReceived, AssetServerError error, const QString& hash){ + assetClient->uploadAsset(_data, _extension, + [this, cacheOnSuccess](bool responseReceived, AssetServerError error, + const QString& hash){ if (!responseReceived) { _error = NetworkError; } else { @@ -63,6 +65,12 @@ void AssetUpload::start() { break; } } + + if (cacheOnSuccess && _error == NoError && + hash == hashData(_data).toHex()) { + saveToCache(getUrl(hash, _extension), _data); + } + emit finished(this, hash); }); } else { diff --git a/libraries/networking/src/AssetUpload.h b/libraries/networking/src/AssetUpload.h index 80faa8a9c1..fbba545209 100644 --- a/libraries/networking/src/AssetUpload.h +++ b/libraries/networking/src/AssetUpload.h @@ -37,7 +37,7 @@ public: AssetUpload(QObject* parent, const QString& filename); - Q_INVOKABLE void start(); + Q_INVOKABLE void start(bool cacheOnSuccess = true); const QString& getFilename() const { return _filename; } const QString& getExtension() const { return _extension; } @@ -50,6 +50,7 @@ signals: private: QString _filename; QString _extension; + QByteArray _data; Error _error; };