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
4242 _scriptsModelFilter.setDynamicSortFilter(true);
4343 }
4444
45+QString 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+}
4556
4657 QObject* scriptsModel();
4758
@@ -290,22 +301,23 @@ void ScriptEngines::stopAllScripts(bool restart) { · 242 unmodified lines
290301 }
291302 }
292303
293−bool ScriptEngines::stopScript(const QString& scriptHash, bool restart) {
304+bool ScriptEngines::stopScript(const QString& rawScriptUrl, bool restart) {
294305 bool stoppedScript = false;
295306 {
296307 QReadLocker lock(&_scriptEnginesHashLock);
297− if (_scriptEnginesHash.contains(scriptHash)) {
298− ScriptEngine* scriptEngine = _scriptEnginesHash[scriptHash];
308+ const QString scriptURLString = normalizeScriptUrl(rawScriptUrl);
309+ if (_scriptEnginesHash.contains(scriptURLString)) {
310+ ScriptEngine* scriptEngine = _scriptEnginesHash[scriptURLString];
299311 if (restart) {
300312 auto scriptCache = DependencyManager::get<ScriptCache>();
301− scriptCache->deleteScript(QUrl(scriptHash));
313+ scriptCache->deleteScript(QUrl(scriptURLString));
302314 connect(scriptEngine, &ScriptEngine::finished, this, [this](QString scriptName, ScriptEngine* engine) {
303315 reloadScript(scriptName);
304316 });
305317 }
306318 scriptEngine->stop();
307319 stoppedScript = true;
308− qCDebug(scriptengine) << "stopping script..." << scriptHash;
320+ qCDebug(scriptengine) << "stopping script..." << scriptURLString;
309321 }
310322 }
311323 return stoppedScript;
@@ -364,11 +376,12 @@ ScriptEngine* ScriptEngines::loadScript(const QString& scriptFilename, bool isUs · 52 unmodified lines
364376 return scriptEngine;
365377 }
366378
367−ScriptEngine* ScriptEngines::getScriptEngine(const QString& scriptHash) {
379+ScriptEngine* ScriptEngines::getScriptEngine(const QString& rawScriptUrl) {
368380 ScriptEngine* result = nullptr;
369381 {
370382 QReadLocker lock(&_scriptEnginesHashLock);
371− auto it = _scriptEnginesHash.find(scriptHash);
383+ const QString scriptURLString = normalizeScriptUrl(rawScriptUrl);
384+ auto it = _scriptEnginesHash.find(scriptURLString);
372385 if (it != _scriptEnginesHash.end()) {
373386 result = it.value();
374387 }
@@ -377,15 +390,16 @@ ScriptEngine* ScriptEngines::getScriptEngine(const QString& scriptHash) { · 2 unmodified lines
377390 }
378391
379392 // FIXME - change to new version of ScriptCache loading notification
380−void ScriptEngines::onScriptEngineLoaded(const QString& scriptFilename) {
381− UserActivityLogger::getInstance().loadedScript(scriptFilename);
393+void ScriptEngines::onScriptEngineLoaded(const QString& rawScriptUrl) {
394+ UserActivityLogger::getInstance().loadedScript(rawScriptUrl);
382395 ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(sender());
383396
384397 launchScriptEngine(scriptEngine);
385398
386399 {
387400 QWriteLocker lock(&_scriptEnginesHashLock);
388− _scriptEnginesHash.insertMulti(scriptFilename, scriptEngine);
401+ const QString scriptURLString = normalizeScriptUrl(rawScriptUrl);
402+ _scriptEnginesHash.insertMulti(scriptURLString, scriptEngine);
389403 }
390404 emit scriptCountChanged();
391405 }
@@ -407,11 +421,11 @@ void ScriptEngines::launchScriptEngine(ScriptEngine* scriptEngine) { · 15 unmodified lines
407421 }
408422
409423
410−void ScriptEngines::onScriptFinished(const QString& scriptName, ScriptEngine* engine) {
424+void ScriptEngines::onScriptFinished(const QString& rawScriptUrl, ScriptEngine* engine) {
411425 bool removed = false;
412426 {
413427 QWriteLocker lock(&_scriptEnginesHashLock);
414− const QString& scriptURLString = QUrl(scriptName).toString();
428+ const QString scriptURLString = normalizeScriptUrl(rawScriptUrl);
415429 for (auto it = _scriptEnginesHash.find(scriptURLString); it != _scriptEnginesHash.end(); ++it) {
416430 if (it.value() == engine) {
417431 _scriptEnginesHash.erase(it);