Make AssetScriptingInterface::initializeCache() blocking

This commit is contained in:
Simon Walton 2019-09-30 17:55:24 -07:00
parent 95b219475d
commit 595b473be7
2 changed files with 20 additions and 1 deletions

View file

@ -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<bool> 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();

View file

@ -356,7 +356,7 @@ public:
* @function Assets.initializeCache
* @returns {boolean} <code>true</code> if the cache is initialized, <code>false</code> 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.