Showing the changes to libraries/script-engine/src/ScriptEngines.cpp (1 of 1 file). Show all
Unified · Split
| @@ -42,6 +42,17 @@ ScriptEngines::ScriptEngines() · 41 unmodified lines | |||
| 42 | _scriptsModelFilter.setDynamicSortFilter(true); | 42 | _scriptsModelFilter.setDynamicSortFilter(true); |
| 43 | } | 43 | } |
| 44 | 44 | ||
| 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 | } | ||
| 45 | 56 | ||
| 46 | QObject* scriptsModel(); | 57 | QObject* scriptsModel(); |
| 47 | 58 | ||
| @@ -290,22 +301,23 @@ void ScriptEngines::stopAllScripts(bool restart) { · 242 unmodified lines | |||
| 290 | } | 301 | } |
| 291 | } | 302 | } |
| 292 | 303 | ||
| 293 | bool ScriptEngines::stopScript(const QString& scriptHash, bool restart) { | 304 | bool 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 | ||
| 367 | ScriptEngine* ScriptEngines::getScriptEngine(const QString& scriptHash) { | 379 | ScriptEngine* 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 notification | 392 | // FIXME - change to new version of ScriptCache loading notification |
| 380 | void ScriptEngines::onScriptEngineLoaded(const QString& scriptFilename) { | 393 | void 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 | ||
| 410 | void ScriptEngines::onScriptFinished(const QString& scriptName, ScriptEngine* engine) { | 424 | void 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); |