Add defaultScriptsOverride option

This commit is contained in:
Ryan Huffman 2019-07-01 23:46:26 -07:00
parent b95586239a
commit d29cd796ca
4 changed files with 31 additions and 7 deletions

View file

@ -831,6 +831,8 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) {
QCoreApplication::addLibraryPath(audioDLLPath); QCoreApplication::addLibraryPath(audioDLLPath);
#endif #endif
QString defaultScriptsOverrideOption = getCmdOption(argc, constArgv, "--defaultScriptsOverride");
DependencyManager::registerInheritance<LimitedNodeList, NodeList>(); DependencyManager::registerInheritance<LimitedNodeList, NodeList>();
DependencyManager::registerInheritance<AvatarHashMap, AvatarManager>(); DependencyManager::registerInheritance<AvatarHashMap, AvatarManager>();
DependencyManager::registerInheritance<EntityDynamicFactoryInterface, InterfaceDynamicFactory>(); DependencyManager::registerInheritance<EntityDynamicFactoryInterface, InterfaceDynamicFactory>();
@ -852,7 +854,7 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) {
DependencyManager::set<AccountManager>(std::bind(&Application::getUserAgent, qApp)); DependencyManager::set<AccountManager>(std::bind(&Application::getUserAgent, qApp));
#endif #endif
DependencyManager::set<StatTracker>(); DependencyManager::set<StatTracker>();
DependencyManager::set<ScriptEngines>(ScriptEngine::CLIENT_SCRIPT); DependencyManager::set<ScriptEngines>(ScriptEngine::CLIENT_SCRIPT, defaultScriptsOverrideOption);
DependencyManager::set<ScriptInitializerMixin, NativeScriptInitializers>(); DependencyManager::set<ScriptInitializerMixin, NativeScriptInitializers>();
DependencyManager::set<Preferences>(); DependencyManager::set<Preferences>();
DependencyManager::set<recording::Deck>(); DependencyManager::set<recording::Deck>();

View file

@ -86,6 +86,7 @@ int main(int argc, const char* argv[]) {
QCommandLineOption responseTokensOption("tokens", "set response tokens <json>", "json"); QCommandLineOption responseTokensOption("tokens", "set response tokens <json>", "json");
QCommandLineOption displayNameOption("displayName", "set user display name <string>", "string"); QCommandLineOption displayNameOption("displayName", "set user display name <string>", "string");
QCommandLineOption setBookmarkOption("setBookmark", "set bookmark key=value pair", "string"); QCommandLineOption setBookmarkOption("setBookmark", "set bookmark key=value pair", "string");
QCommandLineOption defaultScriptOverrideOption("defaultScriptsOverride", "override defaultsScripts.js", "string");
parser.addOption(urlOption); parser.addOption(urlOption);
parser.addOption(noLauncherOption); parser.addOption(noLauncherOption);
@ -99,6 +100,7 @@ int main(int argc, const char* argv[]) {
parser.addOption(responseTokensOption); parser.addOption(responseTokensOption);
parser.addOption(displayNameOption); parser.addOption(displayNameOption);
parser.addOption(setBookmarkOption); parser.addOption(setBookmarkOption);
parser.addOption(defaultScriptOverrideOption);
if (!parser.parse(arguments)) { if (!parser.parse(arguments)) {
std::cout << parser.errorText().toStdString() << std::endl; // Avoid Qt log spam std::cout << parser.errorText().toStdString() << std::endl; // Avoid Qt log spam

View file

@ -29,6 +29,7 @@ static const QString DESKTOP_LOCATION = QStandardPaths::writableLocation(QStanda
static const bool HIFI_SCRIPT_DEBUGGABLES { true }; static const bool HIFI_SCRIPT_DEBUGGABLES { true };
static const QString SETTINGS_KEY { "RunningScripts" }; static const QString SETTINGS_KEY { "RunningScripts" };
static const QUrl DEFAULT_SCRIPTS_LOCATION { "file:///~//defaultScripts.js" }; static const QUrl DEFAULT_SCRIPTS_LOCATION { "file:///~//defaultScripts.js" };
// Using a QVariantList so this is human-readable in the settings file // Using a QVariantList so this is human-readable in the settings file
static Setting::Handle<QVariantList> runningScriptsHandle(SETTINGS_KEY, { QVariant(DEFAULT_SCRIPTS_LOCATION) }); static Setting::Handle<QVariantList> runningScriptsHandle(SETTINGS_KEY, { QVariant(DEFAULT_SCRIPTS_LOCATION) });
@ -64,8 +65,8 @@ void ScriptEngines::onErrorLoadingScript(const QString& url) {
emit errorLoadingScript(url); emit errorLoadingScript(url);
} }
ScriptEngines::ScriptEngines(ScriptEngine::Context context) ScriptEngines::ScriptEngines(ScriptEngine::Context context, const QUrl& defaultScriptsOverride)
: _context(context) : _context(context), _defaultScriptsOverride(defaultScriptsOverride)
{ {
_scriptsModelFilter.setSourceModel(&_scriptsModel); _scriptsModelFilter.setSourceModel(&_scriptsModel);
_scriptsModelFilter.sort(0, Qt::AscendingOrder); _scriptsModelFilter.sort(0, Qt::AscendingOrder);
@ -322,13 +323,22 @@ void ScriptEngines::loadScripts() {
// loads all saved scripts // loads all saved scripts
auto runningScripts = runningScriptsHandle.get(); auto runningScripts = runningScriptsHandle.get();
bool defaultScriptsOverrideSet = !_defaultScriptsOverride.isEmpty();
for (auto script : runningScripts) { for (auto script : runningScripts) {
auto string = script.toString(); auto url = script.toUrl();
if (!string.isEmpty()) { if (!url.isEmpty()) {
loadScript(string); if (defaultScriptsOverrideSet && url == DEFAULT_SCRIPTS_LOCATION) {
_defaultScriptsWasRunning = true;
} else {
loadScript(url);
} }
} }
}
if (defaultScriptsOverrideSet) {
loadScript(_defaultScriptsOverride, false);
}
} }
void ScriptEngines::saveScripts() { void ScriptEngines::saveScripts() {
@ -359,6 +369,10 @@ void ScriptEngines::saveScripts() {
} }
} }
if (_defaultScriptsWasRunning) {
list.append(DEFAULT_SCRIPTS_LOCATION);
}
runningScriptsHandle.set(list); runningScriptsHandle.set(list);
} }

View file

@ -56,7 +56,7 @@ class ScriptEngines : public QObject, public Dependency {
public: public:
using ScriptInitializer = ScriptInitializerMixin::ScriptInitializer; using ScriptInitializer = ScriptInitializerMixin::ScriptInitializer;
ScriptEngines(ScriptEngine::Context context); ScriptEngines(ScriptEngine::Context context, const QUrl& defaultScriptsOverride = QUrl());
void registerScriptInitializer(ScriptInitializer initializer); void registerScriptInitializer(ScriptInitializer initializer);
int runScriptInitializers(ScriptEnginePointer engine); int runScriptInitializers(ScriptEnginePointer engine);
void loadScripts(); void loadScripts();
@ -284,6 +284,12 @@ protected:
std::atomic<bool> _isReloading { false }; std::atomic<bool> _isReloading { false };
bool _defaultScriptsLocationOverridden { false }; bool _defaultScriptsLocationOverridden { false };
QString _debugScriptUrl; 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); QUrl normalizeScriptURL(const QUrl& rawScriptURL);