From 595b473be79ca7d2b6e7a0e0f74d0251528f1675 Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Mon, 30 Sep 2019 17:55:24 -0700 Subject: [PATCH 1/2] Make AssetScriptingInterface::initializeCache() blocking --- .../src/AssetScriptingInterface.cpp | 19 +++++++++++++++++++ .../src/AssetScriptingInterface.h | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/libraries/script-engine/src/AssetScriptingInterface.cpp b/libraries/script-engine/src/AssetScriptingInterface.cpp index 54b570e256..84fefece93 100644 --- a/libraries/script-engine/src/AssetScriptingInterface.cpp +++ b/libraries/script-engine/src/AssetScriptingInterface.cpp @@ -38,6 +38,25 @@ AssetScriptingInterface::AssetScriptingInterface(QObject* parent) : BaseAssetScr #define JS_VERIFY(cond, error) { if (!this->jsVerify(cond, error)) { return; } } +bool AssetScriptingInterface::initializeCache() { + if (!Parent::initializeCache()) { + if (assetClient()) { + std::promise cacheStatusResult; + Promise assetClientPromise(makePromise(__func__)); + assetClientPromise->moveToThread(qApp->thread()); // To ensure the finally() is processed. + + assetClient()->cacheInfoRequestAsync(assetClientPromise); + assetClientPromise->finally([&](QString, QVariantMap result) + { cacheStatusResult.set_value(!result.isEmpty()); }); + return cacheStatusResult.get_future().get(); + } else { + return false; + } + } else { + return true; + } +} + void AssetScriptingInterface::uploadData(QString data, QScriptValue callback) { auto handler = jsBindCallback(thisObject(), callback); QByteArray dataByteArray = data.toUtf8(); diff --git a/libraries/script-engine/src/AssetScriptingInterface.h b/libraries/script-engine/src/AssetScriptingInterface.h index 5da3c51a08..955adaa86c 100644 --- a/libraries/script-engine/src/AssetScriptingInterface.h +++ b/libraries/script-engine/src/AssetScriptingInterface.h @@ -356,7 +356,7 @@ public: * @function Assets.initializeCache * @returns {boolean} true if the cache is initialized, false if it isn't. */ - Q_INVOKABLE bool initializeCache() { return Parent::initializeCache(); } + Q_INVOKABLE bool initializeCache(); /**jsdoc * Checks whether the script can write to the cache. From 95248c7ccdd4c5fe2d8ef77e6b770d1e4a85ad21 Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Mon, 30 Sep 2019 23:43:06 -0700 Subject: [PATCH 2/2] Add header for Android --- libraries/script-engine/src/AssetScriptingInterface.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/script-engine/src/AssetScriptingInterface.cpp b/libraries/script-engine/src/AssetScriptingInterface.cpp index 84fefece93..33be9de2ad 100644 --- a/libraries/script-engine/src/AssetScriptingInterface.cpp +++ b/libraries/script-engine/src/AssetScriptingInterface.cpp @@ -29,6 +29,8 @@ #include #include +#include + using Promise = MiniPromise::Promise; AssetScriptingInterface::AssetScriptingInterface(QObject* parent) : BaseAssetScriptingInterface(parent) {