From 07531353e4514c21d170ed618c32758a3c1ee099 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 30 Dec 2015 00:30:41 -0500 Subject: [PATCH 1/2] Allow a script to set a resource override. --- interface/src/Application.cpp | 3 ++ libraries/networking/src/ResourceManager.cpp | 17 ++++++++-- .../src/ResourceScriptingInterface.cpp | 15 +++++++++ .../src/ResourceScriptingInterface.h | 31 +++++++++++++++++++ libraries/script-engine/src/ScriptEngine.cpp | 5 +-- 5 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 libraries/networking/src/ResourceScriptingInterface.cpp create mode 100644 libraries/networking/src/ResourceScriptingInterface.h diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e81aa7ec52..0c32b5de6f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -47,6 +47,7 @@ #include #include +#include #include #include #include @@ -337,6 +338,8 @@ bool setupEssentials(int& argc, char** argv) { DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); + #if defined(Q_OS_MAC) || defined(Q_OS_WIN) DependencyManager::set(); diff --git a/libraries/networking/src/ResourceManager.cpp b/libraries/networking/src/ResourceManager.cpp index fd465a0aed..f195011290 100644 --- a/libraries/networking/src/ResourceManager.cpp +++ b/libraries/networking/src/ResourceManager.cpp @@ -23,16 +23,27 @@ QMutex ResourceManager::_prefixMapLock; void ResourceManager::setUrlPrefixOverride(const QString& prefix, const QString& replacement) { QMutexLocker locker(&_prefixMapLock); - _prefixMap[prefix] = replacement; + if (replacement.isEmpty()) { + _prefixMap.erase(prefix); + } else { + _prefixMap[prefix] = replacement; + } } QString ResourceManager::normalizeURL(const QString& urlString) { QString result = urlString; - QMutexLocker locker(&_prefixMapLock); - foreach(const auto& entry, _prefixMap) { + PrefixMap copy; + + { + QMutexLocker locker(&_prefixMapLock); + copy = _prefixMap; + } + + foreach(const auto& entry, copy) { const auto& prefix = entry.first; const auto& replacement = entry.second; if (result.startsWith(prefix)) { + qDebug() << "Replacing " << prefix << " with " << replacement; result.replace(0, prefix.size(), replacement); } } diff --git a/libraries/networking/src/ResourceScriptingInterface.cpp b/libraries/networking/src/ResourceScriptingInterface.cpp new file mode 100644 index 0000000000..38be49049c --- /dev/null +++ b/libraries/networking/src/ResourceScriptingInterface.cpp @@ -0,0 +1,15 @@ +// +// Created by Bradley Austin Davis on 2015/12/29 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "ResourceScriptingInterface.h" + +#include "ResourceManager.h" + +void ResourceScriptingInterface::overrideUrlPrefix(const QString& prefix, const QString& replacement) { + ResourceManager::setUrlPrefixOverride(prefix, replacement); +} diff --git a/libraries/networking/src/ResourceScriptingInterface.h b/libraries/networking/src/ResourceScriptingInterface.h new file mode 100644 index 0000000000..d9777e7514 --- /dev/null +++ b/libraries/networking/src/ResourceScriptingInterface.h @@ -0,0 +1,31 @@ +// +// AssetClient.h +// libraries/networking/src +// +// Created by Ryan Huffman on 2015/07/21 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + + +#ifndef hifi_networking_ResourceScriptingInterface_h +#define hifi_networking_ResourceScriptingInterface_h + +#include + +#include + +class ResourceScriptingInterface : public QObject, public Dependency { + Q_OBJECT +public: + Q_INVOKABLE void overrideUrlPrefix(const QString& prefix, const QString& replacement); + + Q_INVOKABLE void restoreUrlPrefix(const QString& prefix) { + overrideUrlPrefix(prefix, ""); + } +}; + + +#endif diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index ef448e93f0..6aa48a532d 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -391,7 +392,7 @@ void ScriptEngine::init() { registerGlobalObject("Recording", recordingInterface.data()); registerGlobalObject("Assets", &_assetScriptingInterface); - + registerGlobalObject("Resources", DependencyManager::get().data()); } void ScriptEngine::registerValue(const QString& valueName, QScriptValue value) { @@ -1296,4 +1297,4 @@ void ScriptEngine::callEntityScriptMethod(const EntityItemID& entityID, const QS entityScript.property(methodName).call(entityScript, args); } } -} \ No newline at end of file +} From 3b4f5d36a5cd96ab8d2544e9c15e3f1d23ea34b2 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Sun, 3 Jan 2016 12:29:32 -0800 Subject: [PATCH 2/2] PR feedback --- assignment-client/src/AssignmentClient.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index bbee597797..0d62b8dcc7 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include "AssignmentFactory.h" #include "AssignmentActionFactory.h" @@ -61,6 +62,7 @@ AssignmentClient::AssignmentClient(Assignment::Type requestAssignmentType, QStri DependencyManager::registerInheritance(); auto actionFactory = DependencyManager::set(); + DependencyManager::set(); // setup a thread for the NodeList and its PacketReceiver QThread* nodeThread = new QThread(this);