From d29cd796ca9f0362e94998cd1c0f89c25f1496a1 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 1 Jul 2019 23:46:26 -0700 Subject: [PATCH] Add defaultScriptsOverride option --- interface/src/Application.cpp | 4 +++- interface/src/main.cpp | 2 ++ libraries/script-engine/src/ScriptEngines.cpp | 24 +++++++++++++++---- libraries/script-engine/src/ScriptEngines.h | 8 ++++++- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 1a0030bc12..b9ae1d3fcf 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -831,6 +831,8 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { QCoreApplication::addLibraryPath(audioDLLPath); #endif + QString defaultScriptsOverrideOption = getCmdOption(argc, constArgv, "--defaultScriptsOverride"); + DependencyManager::registerInheritance(); DependencyManager::registerInheritance(); DependencyManager::registerInheritance(); @@ -852,7 +854,7 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { DependencyManager::set(std::bind(&Application::getUserAgent, qApp)); #endif DependencyManager::set(); - DependencyManager::set(ScriptEngine::CLIENT_SCRIPT); + DependencyManager::set(ScriptEngine::CLIENT_SCRIPT, defaultScriptsOverrideOption); DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 3fd65f452c..f6ce1ec8ad 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -86,6 +86,7 @@ int main(int argc, const char* argv[]) { QCommandLineOption responseTokensOption("tokens", "set response tokens ", "json"); QCommandLineOption displayNameOption("displayName", "set user display name ", "string"); QCommandLineOption setBookmarkOption("setBookmark", "set bookmark key=value pair", "string"); + QCommandLineOption defaultScriptOverrideOption("defaultScriptsOverride", "override defaultsScripts.js", "string"); parser.addOption(urlOption); parser.addOption(noLauncherOption); @@ -99,6 +100,7 @@ int main(int argc, const char* argv[]) { parser.addOption(responseTokensOption); parser.addOption(displayNameOption); parser.addOption(setBookmarkOption); + parser.addOption(defaultScriptOverrideOption); if (!parser.parse(arguments)) { std::cout << parser.errorText().toStdString() << std::endl; // Avoid Qt log spam diff --git a/libraries/script-engine/src/ScriptEngines.cpp b/libraries/script-engine/src/ScriptEngines.cpp index 17f2aea9a5..f94fca3463 100644 --- a/libraries/script-engine/src/ScriptEngines.cpp +++ b/libraries/script-engine/src/ScriptEngines.cpp @@ -29,6 +29,7 @@ static const QString DESKTOP_LOCATION = QStandardPaths::writableLocation(QStanda static const bool HIFI_SCRIPT_DEBUGGABLES { true }; static const QString SETTINGS_KEY { "RunningScripts" }; static const QUrl DEFAULT_SCRIPTS_LOCATION { "file:///~//defaultScripts.js" }; + // Using a QVariantList so this is human-readable in the settings file static Setting::Handle runningScriptsHandle(SETTINGS_KEY, { QVariant(DEFAULT_SCRIPTS_LOCATION) }); @@ -64,8 +65,8 @@ void ScriptEngines::onErrorLoadingScript(const QString& url) { emit errorLoadingScript(url); } -ScriptEngines::ScriptEngines(ScriptEngine::Context context) - : _context(context) +ScriptEngines::ScriptEngines(ScriptEngine::Context context, const QUrl& defaultScriptsOverride) + : _context(context), _defaultScriptsOverride(defaultScriptsOverride) { _scriptsModelFilter.setSourceModel(&_scriptsModel); _scriptsModelFilter.sort(0, Qt::AscendingOrder); @@ -322,13 +323,22 @@ void ScriptEngines::loadScripts() { // loads all saved scripts auto runningScripts = runningScriptsHandle.get(); + bool defaultScriptsOverrideSet = !_defaultScriptsOverride.isEmpty(); for (auto script : runningScripts) { - auto string = script.toString(); - if (!string.isEmpty()) { - loadScript(string); + auto url = script.toUrl(); + if (!url.isEmpty()) { + if (defaultScriptsOverrideSet && url == DEFAULT_SCRIPTS_LOCATION) { + _defaultScriptsWasRunning = true; + } else { + loadScript(url); + } } } + + if (defaultScriptsOverrideSet) { + loadScript(_defaultScriptsOverride, false); + } } void ScriptEngines::saveScripts() { @@ -359,6 +369,10 @@ void ScriptEngines::saveScripts() { } } + if (_defaultScriptsWasRunning) { + list.append(DEFAULT_SCRIPTS_LOCATION); + } + runningScriptsHandle.set(list); } diff --git a/libraries/script-engine/src/ScriptEngines.h b/libraries/script-engine/src/ScriptEngines.h index 4db150fce5..de836a3e09 100644 --- a/libraries/script-engine/src/ScriptEngines.h +++ b/libraries/script-engine/src/ScriptEngines.h @@ -56,7 +56,7 @@ class ScriptEngines : public QObject, public Dependency { public: using ScriptInitializer = ScriptInitializerMixin::ScriptInitializer; - ScriptEngines(ScriptEngine::Context context); + ScriptEngines(ScriptEngine::Context context, const QUrl& defaultScriptsOverride = QUrl()); void registerScriptInitializer(ScriptInitializer initializer); int runScriptInitializers(ScriptEnginePointer engine); void loadScripts(); @@ -284,6 +284,12 @@ protected: std::atomic _isReloading { false }; bool _defaultScriptsLocationOverridden { false }; QString _debugScriptUrl; + + // If this is set, defaultScripts.js will not be run if it is in the settings, + // and this will be run instead. This script will not be persisted to settings. + const QUrl _defaultScriptsOverride { }; + // If an override is set, this will be true if defaultScripts.js was previously running. + bool _defaultScriptsWasRunning { false }; }; QUrl normalizeScriptURL(const QUrl& rawScriptURL);