From 2c84478dc1d57a037c23a7913e293f2c8a2d9452 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Fri, 18 Sep 2020 22:39:44 +1200 Subject: [PATCH] Register metatype --- libraries/networking/src/ExternalResource.h | 4 +--- libraries/script-engine/src/ScriptEngine.cpp | 19 +++++++++++++++++-- libraries/script-engine/src/ScriptEngine.h | 2 +- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/libraries/networking/src/ExternalResource.h b/libraries/networking/src/ExternalResource.h index 403938650b..6122759b67 100644 --- a/libraries/networking/src/ExternalResource.h +++ b/libraries/networking/src/ExternalResource.h @@ -48,8 +48,7 @@ public: * will be done to the Assets bucket instead. This should ease the transition and ensure a clean * separation. */ - enum class Bucket - { + enum class Bucket { /** Assets that used to be in the hifi-public S3 bucket */ HF_Public, @@ -62,7 +61,6 @@ public: /** Vircadia assets */ Assets }; - Q_ENUM(Bucket) /** diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 1ee5f11f04..a4f1e29e2a 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -108,6 +108,8 @@ int functionSignatureMetaID = qRegisterMetaType(); +Q_DECLARE_METATYPE(ExternalResource::Bucket); + static QScriptValue debugPrint(QScriptContext* context, QScriptEngine* engine) { QString message = ""; for (int i = 0; i < context->argumentCount(); i++) { @@ -663,6 +665,17 @@ void avatarDataFromScriptValue(const QScriptValue& object, ScriptAvatarData*& ou out = nullptr; } +QScriptValue externalResourceBucketToScriptValue(QScriptEngine* engine, ExternalResource::Bucket const& in) { + //return engine->newQObject(in, QScriptEngine::ScriptOwnership, DEFAULT_QOBJECT_WRAP_OPTIONS); + return QScriptValue((int)in); +} + +void externalResourceBucketFromScriptValue(const QScriptValue& object, ExternalResource::Bucket& out) { + // This is not implemented because there are no slots/properties that take an AvatarSharedPointer from a script + assert(false); + out = ExternalResource::Bucket::Assets; +} + void ScriptEngine::resetModuleCache(bool deleteScriptCache) { if (QThread::currentThread() != thread()) { executeOnScriptThread([=]() { resetModuleCache(deleteScriptCache); }); @@ -769,6 +782,8 @@ void ScriptEngine::init() { require.setProperty("resolve", resolve, READONLY_PROP_FLAGS); resetModuleCache(); } + + qScriptRegisterMetaType(this, externalResourceBucketToScriptValue, externalResourceBucketFromScriptValue); registerEnum("Script.ExternalPaths", QMetaEnum::fromType()); registerGlobalObject("Audio", DependencyManager::get().data()); @@ -2871,6 +2886,6 @@ void ScriptEngine::callEntityScriptMethod(const EntityItemID& entityID, const QS } } -QString ScriptEngine::getExternalPath(ExternalResource::Bucket bucket, const QString &relative_path) { - return ExternalResource::getInstance()->getUrl(bucket, relative_path); +QString ScriptEngine::getExternalPath(ExternalResource::Bucket bucket, const QString& relativePath) { + return ExternalResource::getInstance()->getUrl(bucket, relativePath); } diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index ce77b36674..abb232a0f5 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -684,7 +684,7 @@ public: void setScriptEngines(QSharedPointer& scriptEngines) { _scriptEngines = scriptEngines; } - Q_INVOKABLE QString getExternalPath(ExternalResource::Bucket bucket, const QString &relative_path); + Q_INVOKABLE QString getExternalPath(ExternalResource::Bucket bucket, const QString& relativePath); public slots: