From c5b574664672aaebe6ecce27a71a9c23c4ceecbc Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 8 Apr 2016 17:29:54 -0700 Subject: [PATCH 1/2] Save the set of running scripts when they change, as well as at shutdown --- interface/src/Application.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index a6555352dd..a3c4ea646f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -731,11 +731,18 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) : registerScriptEngineWithApplicationServices(engine); }); - connect(scriptEngines, &ScriptEngines::scriptCountChanged, scriptEngines, [this] { + static const int SCRIPT_SAVE_COUNTDOWN_INTERVAL_MS = 5000; + QTimer* scriptSaveTimer = new QTimer(this); + connect(scriptSaveTimer, &QTimer::timeout, [] { + DependencyManager::get()->saveScripts(); + }); + scriptSaveTimer->setSingleShot(true); + connect(scriptEngines, &ScriptEngines::scriptCountChanged, scriptEngines, [this, scriptSaveTimer] { auto scriptEngines = DependencyManager::get(); if (scriptEngines->getRunningScripts().isEmpty()) { getMyAvatar()->clearScriptableSettings(); } + scriptSaveTimer->start(SCRIPT_SAVE_COUNTDOWN_INTERVAL_MS); }, Qt::QueuedConnection); connect(scriptEngines, &ScriptEngines::scriptsReloading, scriptEngines, [this] { From 5a5583d3a5b56eb2bb251047503d4b87f864ec7a Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Sat, 9 Apr 2016 21:43:50 -0700 Subject: [PATCH 2/2] PR comments --- interface/src/Application.cpp | 9 +-------- libraries/script-engine/src/ScriptEngines.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index a3c4ea646f..a6555352dd 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -731,18 +731,11 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) : registerScriptEngineWithApplicationServices(engine); }); - static const int SCRIPT_SAVE_COUNTDOWN_INTERVAL_MS = 5000; - QTimer* scriptSaveTimer = new QTimer(this); - connect(scriptSaveTimer, &QTimer::timeout, [] { - DependencyManager::get()->saveScripts(); - }); - scriptSaveTimer->setSingleShot(true); - connect(scriptEngines, &ScriptEngines::scriptCountChanged, scriptEngines, [this, scriptSaveTimer] { + connect(scriptEngines, &ScriptEngines::scriptCountChanged, scriptEngines, [this] { auto scriptEngines = DependencyManager::get(); if (scriptEngines->getRunningScripts().isEmpty()) { getMyAvatar()->clearScriptableSettings(); } - scriptSaveTimer->start(SCRIPT_SAVE_COUNTDOWN_INTERVAL_MS); }, Qt::QueuedConnection); connect(scriptEngines, &ScriptEngines::scriptsReloading, scriptEngines, [this] { diff --git a/libraries/script-engine/src/ScriptEngines.cpp b/libraries/script-engine/src/ScriptEngines.cpp index 668b9aa3a2..78141188ef 100644 --- a/libraries/script-engine/src/ScriptEngines.cpp +++ b/libraries/script-engine/src/ScriptEngines.cpp @@ -40,6 +40,19 @@ ScriptEngines::ScriptEngines() _scriptsModelFilter.setSourceModel(&_scriptsModel); _scriptsModelFilter.sort(0, Qt::AscendingOrder); _scriptsModelFilter.setDynamicSortFilter(true); + + static const int SCRIPT_SAVE_COUNTDOWN_INTERVAL_MS = 5000; + QTimer* scriptSaveTimer = new QTimer(this); + scriptSaveTimer->setSingleShot(true); + QMetaObject::Connection timerConnection = connect(scriptSaveTimer, &QTimer::timeout, [] { + DependencyManager::get()->saveScripts(); + }); + connect(qApp, &QCoreApplication::aboutToQuit, [=] { + disconnect(timerConnection); + }); + connect(this, &ScriptEngines::scriptCountChanged, this, [scriptSaveTimer] { + scriptSaveTimer->start(SCRIPT_SAVE_COUNTDOWN_INTERVAL_MS); + }, Qt::QueuedConnection); } QUrl normalizeScriptURL(const QUrl& rawScriptURL) {