History

Fix inability to stop local scripts

Brad Davis committed 10 years ago

Commit e8adcd91 parent 6f85ee11 file · +26 −12Browse files

Showing the changes to libraries/script-engine/src/ScriptEngines.cpp (1 of 1 file). Show all

Unified · Split

libraries/script-engine/src/ScriptEngines.cpp+26−12
@@ -42,6 +42,17 @@ ScriptEngines::ScriptEngines() · 41 unmodified lines
42 _scriptsModelFilter.setDynamicSortFilter(true);42 _scriptsModelFilter.setDynamicSortFilter(true);
43}43}
44 44
45QString normalizeScriptUrl(const QString& rawScriptUrl) {
46 auto lower = rawScriptUrl.toLower();
47 if (!rawScriptUrl.startsWith("http:") && !rawScriptUrl.startsWith("https:") && !rawScriptUrl.startsWith("atp:")) {
48 if (rawScriptUrl.startsWith("file:")) {
49 return rawScriptUrl.toLower();
50 }
51 // Force lowercase on file scripts because of drive letter weirdness.
52 return QUrl::fromLocalFile(rawScriptUrl).toString().toLower();
53 }
54 return QUrl(rawScriptUrl).toString();
55}
45 56
46QObject* scriptsModel();57QObject* scriptsModel();
47 58
@@ -290,22 +301,23 @@ void ScriptEngines::stopAllScripts(bool restart) { · 242 unmodified lines
290 }301 }
291}302}
292 303
293bool ScriptEngines::stopScript(const QString& scriptHash, bool restart) {304bool ScriptEngines::stopScript(const QString& rawScriptUrl, bool restart) {
294 bool stoppedScript = false;305 bool stoppedScript = false;
295 {306 {
296 QReadLocker lock(&_scriptEnginesHashLock);307 QReadLocker lock(&_scriptEnginesHashLock);
297 if (_scriptEnginesHash.contains(scriptHash)) {308 const QString scriptURLString = normalizeScriptUrl(rawScriptUrl);
298 ScriptEngine* scriptEngine = _scriptEnginesHash[scriptHash];309 if (_scriptEnginesHash.contains(scriptURLString)) {
310 ScriptEngine* scriptEngine = _scriptEnginesHash[scriptURLString];
299 if (restart) {311 if (restart) {
300 auto scriptCache = DependencyManager::get<ScriptCache>();312 auto scriptCache = DependencyManager::get<ScriptCache>();
301 scriptCache->deleteScript(QUrl(scriptHash));313 scriptCache->deleteScript(QUrl(scriptURLString));
302 connect(scriptEngine, &ScriptEngine::finished, this, [this](QString scriptName, ScriptEngine* engine) {314 connect(scriptEngine, &ScriptEngine::finished, this, [this](QString scriptName, ScriptEngine* engine) {
303 reloadScript(scriptName);315 reloadScript(scriptName);
304 });316 });
305 }317 }
306 scriptEngine->stop();318 scriptEngine->stop();
307 stoppedScript = true;319 stoppedScript = true;
308 qCDebug(scriptengine) << "stopping script..." << scriptHash;320 qCDebug(scriptengine) << "stopping script..." << scriptURLString;
309 }321 }
310 }322 }
311 return stoppedScript;323 return stoppedScript;
@@ -364,11 +376,12 @@ ScriptEngine* ScriptEngines::loadScript(const QString& scriptFilename, bool isUs · 52 unmodified lines
364 return scriptEngine;376 return scriptEngine;
365}377}
366 378
367ScriptEngine* ScriptEngines::getScriptEngine(const QString& scriptHash) {379ScriptEngine* ScriptEngines::getScriptEngine(const QString& rawScriptUrl) {
368 ScriptEngine* result = nullptr;380 ScriptEngine* result = nullptr;
369 {381 {
370 QReadLocker lock(&_scriptEnginesHashLock);382 QReadLocker lock(&_scriptEnginesHashLock);
371 auto it = _scriptEnginesHash.find(scriptHash);383 const QString scriptURLString = normalizeScriptUrl(rawScriptUrl);
384 auto it = _scriptEnginesHash.find(scriptURLString);
372 if (it != _scriptEnginesHash.end()) {385 if (it != _scriptEnginesHash.end()) {
373 result = it.value();386 result = it.value();
374 }387 }
@@ -377,15 +390,16 @@ ScriptEngine* ScriptEngines::getScriptEngine(const QString& scriptHash) { · 2 unmodified lines
377}390}
378 391
379// FIXME - change to new version of ScriptCache loading notification392// FIXME - change to new version of ScriptCache loading notification
380void ScriptEngines::onScriptEngineLoaded(const QString& scriptFilename) {393void ScriptEngines::onScriptEngineLoaded(const QString& rawScriptUrl) {
381 UserActivityLogger::getInstance().loadedScript(scriptFilename);394 UserActivityLogger::getInstance().loadedScript(rawScriptUrl);
382 ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(sender());395 ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(sender());
383 396
384 launchScriptEngine(scriptEngine);397 launchScriptEngine(scriptEngine);
385 398
386 {399 {
387 QWriteLocker lock(&_scriptEnginesHashLock);400 QWriteLocker lock(&_scriptEnginesHashLock);
388 _scriptEnginesHash.insertMulti(scriptFilename, scriptEngine);401 const QString scriptURLString = normalizeScriptUrl(rawScriptUrl);
402 _scriptEnginesHash.insertMulti(scriptURLString, scriptEngine);
389 }403 }
390 emit scriptCountChanged();404 emit scriptCountChanged();
391}405}
@@ -407,11 +421,11 @@ void ScriptEngines::launchScriptEngine(ScriptEngine* scriptEngine) { · 15 unmodified lines
407}421}
408 422
409 423
410void ScriptEngines::onScriptFinished(const QString& scriptName, ScriptEngine* engine) {424void ScriptEngines::onScriptFinished(const QString& rawScriptUrl, ScriptEngine* engine) {
411 bool removed = false;425 bool removed = false;
412 {426 {
413 QWriteLocker lock(&_scriptEnginesHashLock);427 QWriteLocker lock(&_scriptEnginesHashLock);
414 const QString& scriptURLString = QUrl(scriptName).toString();428 const QString scriptURLString = normalizeScriptUrl(rawScriptUrl);
415 for (auto it = _scriptEnginesHash.find(scriptURLString); it != _scriptEnginesHash.end(); ++it) {429 for (auto it = _scriptEnginesHash.find(scriptURLString); it != _scriptEnginesHash.end(); ++it) {
416 if (it.value() == engine) {430 if (it.value() == engine) {
417 _scriptEnginesHash.erase(it);431 _scriptEnginesHash.erase(it);