diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 43ffe9e4f4..ee92f03541 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5545,20 +5545,18 @@ void Application::loadSettings() { getMyAvatar()->loadData(); - auto bucketEnum = QMetaEnum::fromType(); - auto er = ExternalResource::getInstance(); + auto externalResource = ExternalResource::getInstance(); - for(int i=0;i(bucketEnum.keyToValue(keyName)); - Setting::Handle url(setting, er->getBase(bucket)); - er->setBase( bucket, url.get() ); + Setting::Handle url(setting, externalResource->getBase(bucket)); + externalResource->setBase(bucket, url.get()); } - _settingsLoaded = true; } @@ -5577,16 +5575,16 @@ void Application::saveSettings() const { PluginManager::getInstance()->saveSettings(); auto bucketEnum = QMetaEnum::fromType(); - auto er = ExternalResource::getInstance(); + auto externalResource = ExternalResource::getInstance(); - for(int i=0;i(bucketEnum.keyToValue(keyName)); - Setting::Handle url(setting, er->getBase(bucket)); - url.set(er->getBase(bucket)); - } + Setting::Handle url(setting, externalResource->getBase(bucket)); + url.set(externalResource->getBase(bucket)); + } } bool Application::importEntities(const QString& urlOrFilename, const bool isObservable, const qint64 callerId) { @@ -7568,8 +7566,8 @@ void Application::registerScriptEngineWithApplicationServices(const ScriptEngine scriptEngine->registerGlobalObject("ResourceRequestObserver", DependencyManager::get().data()); - scriptEngine->registerGlobalObject("ExternalResource", ExternalResource::getInstance()); - scriptEngine->registerEnum("ExternalResource", QMetaEnum::fromType()); + //scriptEngine->registerGlobalObject("ExternalResource", ExternalResource::getInstance()); + // scriptEngine->registerEnum("Script.ExternalPaths", QMetaEnum::fromType()); registerInteractiveWindowMetaType(scriptEngine.data()); diff --git a/interface/src/scripting/ScreenshareScriptingInterface.cpp b/interface/src/scripting/ScreenshareScriptingInterface.cpp index 21d19f6466..00c4d03c7a 100644 --- a/interface/src/scripting/ScreenshareScriptingInterface.cpp +++ b/interface/src/scripting/ScreenshareScriptingInterface.cpp @@ -129,7 +129,7 @@ static const uint8_t LOCAL_SCREENSHARE_WEB_ENTITY_FPS = 30; // The `z` value here is dynamic. static const glm::vec3 LOCAL_SCREENSHARE_WEB_ENTITY_LOCAL_POSITION(0.0128f, -0.0918f, 0.0f); static const glm::vec3 LOCAL_SCREENSHARE_WEB_ENTITY_DIMENSIONS(3.6790f, 2.0990f, 0.0100f); -static const QString LOCAL_SCREENSHARE_WEB_ENTITY_URL = ExternalResource::getInstance()->getUrl(ExternalResource::Bucket::Content, +static const QString LOCAL_SCREENSHARE_WEB_ENTITY_URL = ExternalResource::getInstance()->getUrl(ExternalResource::Bucket::HF_Content, "Experiences/Releases/usefulUtilities/smartBoard/screenshareViewer/screenshareClient.html"); static const QString LOCAL_SCREENSHARE_WEB_ENTITY_HOST_TYPE = "local"; void ScreenshareScriptingInterface::startScreenshare(const QUuid& screenshareZoneID, diff --git a/libraries/networking/src/ExternalResource.cpp b/libraries/networking/src/ExternalResource.cpp index eceed37175..ef9a877e8d 100644 --- a/libraries/networking/src/ExternalResource.cpp +++ b/libraries/networking/src/ExternalResource.cpp @@ -58,21 +58,22 @@ QString ExternalResource::getBase(Bucket bucket) { return _bucketBases.value(bucket).toString(); }; -void ExternalResource::setBase(Bucket bucket, const QString& url) { +bool ExternalResource::setBase(Bucket bucket, const QString& url) { QUrl new_url(url); if (!new_url.isValid() || new_url.isRelative()) { qCCritical(external_resource) << "Attempted to set bucket " << bucket << " to invalid URL " << url; - return; + return false; } if (!_bucketBases.contains(bucket)) { qCritical(external_resource) << "Invalid bucket " << bucket; - return; + return false; } qCDebug(external_resource) << "Setting base URL for " << bucket << " to " << new_url; std::lock_guard guard(_bucketMutex); _bucketBases[bucket] = new_url; + return true; } diff --git a/libraries/networking/src/ExternalResource.h b/libraries/networking/src/ExternalResource.h index 2beb070ebe..403938650b 100644 --- a/libraries/networking/src/ExternalResource.h +++ b/libraries/networking/src/ExternalResource.h @@ -30,7 +30,8 @@ * This class makes it possible to deal with this in a more flexible manner: rather than hardcoding URLs * all over the codebase, now it's possible to easily change where all those things are downloaded from. * - * + * The term 'bucket' refers to the buckets used on Amazon S3, but there's no requirement for S3 or anything + * similar to be used. The term should just be taken as referring to the name of a data set. */ class ExternalResource : public QObject { Q_OBJECT @@ -50,13 +51,13 @@ public: enum class Bucket { /** Assets that used to be in the hifi-public S3 bucket */ - Public, + HF_Public, /** Assets that used to be in the hifi-content S3 bucket */ - Content, + HF_Content, /** Assets that used to be in the mpassets S3 bucket (hifi marketplace) */ - MPAssets, + HF_Marketplace, /** Vircadia assets */ Assets @@ -124,9 +125,24 @@ public: return ExternalResource::getQUrl(bucket, QUrl(relative_path)).toString(); }; - Q_INVOKABLE QString getBase(Bucket bucket); + /** + * Returns the base path for a bucket + * + * @param bucket Bucket whose path to return + */ + QString getBase(Bucket bucket); - Q_INVOKABLE void setBase(Bucket bucket, const QString& url); + /** + * Sets the base path for a bucket + * + * The \p url parameter will be validated, and the action will not be performed + * if the URL isn't a valid one, or if the bucket wasn't valid. + * + * @param bucket Bucket whose path to set + * @param url Base URL for the bucket. + * @returns Whether the base was set. + */ + bool setBase(Bucket bucket, const QString& url); private: ExternalResource(QObject* parent = nullptr); @@ -134,10 +150,10 @@ private: std::mutex _bucketMutex; QMap _bucketBases{ - { Bucket::Public, QUrl("https://public.vircadia.com") }, - { Bucket::Content, QUrl("https://content.vircadia.com") }, + { Bucket::HF_Public, QUrl("https://public.vircadia.com") }, + { Bucket::HF_Content, QUrl("https://content.vircadia.com") }, { Bucket::Assets, QUrl("https://assets.vircadia.com") }, - { Bucket::MPAssets, QUrl("https://mpassets.vircadia.com") }, + { Bucket::HF_Marketplace, QUrl("https://mpassets.vircadia.com") }, }; }; diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 164ea03d54..1ee5f11f04 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -769,6 +769,7 @@ void ScriptEngine::init() { require.setProperty("resolve", resolve, READONLY_PROP_FLAGS); resetModuleCache(); } + registerEnum("Script.ExternalPaths", QMetaEnum::fromType()); registerGlobalObject("Audio", DependencyManager::get().data()); @@ -2869,3 +2870,7 @@ 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); +} diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index ec538e8fa8..ce77b36674 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -38,6 +39,7 @@ #include "AssetScriptingInterface.h" #include "AudioScriptingInterface.h" #include "BaseScriptEngine.h" +#include "ExternalResource.h" #include "Quat.h" #include "Mat4.h" #include "ScriptCache.h" @@ -682,6 +684,8 @@ public: void setScriptEngines(QSharedPointer& scriptEngines) { _scriptEngines = scriptEngines; } + Q_INVOKABLE QString getExternalPath(ExternalResource::Bucket bucket, const QString &relative_path); + public slots: /**jsdoc