From a1668cdc737c3a56a06453ac59059272a63d3f94 Mon Sep 17 00:00:00 2001 From: samcake Date: Mon, 23 Nov 2015 22:28:59 -0800 Subject: [PATCH] Let the AssertClient JS interface use global vars --- libraries/networking/src/AssetClient.cpp | 14 ++++++++++---- libraries/networking/src/AssetClient.h | 3 +++ libraries/script-engine/src/ScriptEngine.h | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/libraries/networking/src/AssetClient.cpp b/libraries/networking/src/AssetClient.cpp index 8ac019ff56..83d91b32d3 100644 --- a/libraries/networking/src/AssetClient.cpp +++ b/libraries/networking/src/AssetClient.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include "AssetRequest.h" @@ -374,16 +375,21 @@ void AssetScriptingInterface::uploadData(QString data, QString extension, QScrip return; } - QObject::connect(upload, &AssetUpload::finished, this, [callback, extension](AssetUpload* upload, const QString& hash) mutable { + QObject::connect(upload, &AssetUpload::finished, this, [this, callback, extension](AssetUpload* upload, const QString& hash) mutable { if (callback.isFunction()) { QString url = "atp://" + hash + "." + extension; QScriptValueList args { url }; - callback.call(QScriptValue(), args); + callback.call(_engine->currentContext()->thisObject(), args); } }); upload->start(); } +AssetScriptingInterface::AssetScriptingInterface(QScriptEngine* engine) : + _engine(engine) +{ +} + void AssetScriptingInterface::downloadData(QString urlString, QScriptValue callback) { const QString ATP_SCHEME { "atp://" }; @@ -410,14 +416,14 @@ void AssetScriptingInterface::downloadData(QString urlString, QScriptValue callb _pendingRequests << assetRequest; - connect(assetRequest, &AssetRequest::finished, [this, callback](AssetRequest* request) mutable { + connect(assetRequest, &AssetRequest::finished, this, [this, callback](AssetRequest* request) mutable { Q_ASSERT(request->getState() == AssetRequest::Finished); if (request->getError() == AssetRequest::Error::NoError) { if (callback.isFunction()) { QString data = QString::fromUtf8(request->getData()); QScriptValueList args { data }; - callback.call(QScriptValue(), args); + callback.call(_engine->currentContext()->thisObject(), args); } } diff --git a/libraries/networking/src/AssetClient.h b/libraries/networking/src/AssetClient.h index f1bb210614..0616317eec 100644 --- a/libraries/networking/src/AssetClient.h +++ b/libraries/networking/src/AssetClient.h @@ -74,10 +74,13 @@ private: class AssetScriptingInterface : public QObject { Q_OBJECT public: + AssetScriptingInterface(QScriptEngine* engine); + Q_INVOKABLE void uploadData(QString data, QString extension, QScriptValue callback); Q_INVOKABLE void downloadData(QString url, QScriptValue downloadComplete); protected: QSet _pendingRequests; + QScriptEngine* _engine; }; diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index 1412ba7aaf..75322f369a 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -196,7 +196,7 @@ private: ArrayBufferClass* _arrayBufferClass; - AssetScriptingInterface _assetScriptingInterface; + AssetScriptingInterface _assetScriptingInterface{ this }; QHash _registeredHandlers; void forwardHandlerCall(const EntityItemID& entityID, const QString& eventName, QScriptValueList eventHanderArgs);