mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 19:21:16 +02:00
Fix inability to stop local scripts
This commit is contained in:
parent
6f85ee135f
commit
e8adcd9f1f
1 changed files with 26 additions and 12 deletions
|
@ -42,6 +42,17 @@ ScriptEngines::ScriptEngines()
|
||||||
_scriptsModelFilter.setDynamicSortFilter(true);
|
_scriptsModelFilter.setDynamicSortFilter(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString normalizeScriptUrl(const QString& rawScriptUrl) {
|
||||||
|
auto lower = rawScriptUrl.toLower();
|
||||||
|
if (!rawScriptUrl.startsWith("http:") && !rawScriptUrl.startsWith("https:") && !rawScriptUrl.startsWith("atp:")) {
|
||||||
|
if (rawScriptUrl.startsWith("file:")) {
|
||||||
|
return rawScriptUrl.toLower();
|
||||||
|
}
|
||||||
|
// Force lowercase on file scripts because of drive letter weirdness.
|
||||||
|
return QUrl::fromLocalFile(rawScriptUrl).toString().toLower();
|
||||||
|
}
|
||||||
|
return QUrl(rawScriptUrl).toString();
|
||||||
|
}
|
||||||
|
|
||||||
QObject* scriptsModel();
|
QObject* scriptsModel();
|
||||||
|
|
||||||
|
@ -290,22 +301,23 @@ void ScriptEngines::stopAllScripts(bool restart) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ScriptEngines::stopScript(const QString& scriptHash, bool restart) {
|
bool ScriptEngines::stopScript(const QString& rawScriptUrl, bool restart) {
|
||||||
bool stoppedScript = false;
|
bool stoppedScript = false;
|
||||||
{
|
{
|
||||||
QReadLocker lock(&_scriptEnginesHashLock);
|
QReadLocker lock(&_scriptEnginesHashLock);
|
||||||
if (_scriptEnginesHash.contains(scriptHash)) {
|
const QString scriptURLString = normalizeScriptUrl(rawScriptUrl);
|
||||||
ScriptEngine* scriptEngine = _scriptEnginesHash[scriptHash];
|
if (_scriptEnginesHash.contains(scriptURLString)) {
|
||||||
|
ScriptEngine* scriptEngine = _scriptEnginesHash[scriptURLString];
|
||||||
if (restart) {
|
if (restart) {
|
||||||
auto scriptCache = DependencyManager::get<ScriptCache>();
|
auto scriptCache = DependencyManager::get<ScriptCache>();
|
||||||
scriptCache->deleteScript(QUrl(scriptHash));
|
scriptCache->deleteScript(QUrl(scriptURLString));
|
||||||
connect(scriptEngine, &ScriptEngine::finished, this, [this](QString scriptName, ScriptEngine* engine) {
|
connect(scriptEngine, &ScriptEngine::finished, this, [this](QString scriptName, ScriptEngine* engine) {
|
||||||
reloadScript(scriptName);
|
reloadScript(scriptName);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
scriptEngine->stop();
|
scriptEngine->stop();
|
||||||
stoppedScript = true;
|
stoppedScript = true;
|
||||||
qCDebug(scriptengine) << "stopping script..." << scriptHash;
|
qCDebug(scriptengine) << "stopping script..." << scriptURLString;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return stoppedScript;
|
return stoppedScript;
|
||||||
|
@ -364,11 +376,12 @@ ScriptEngine* ScriptEngines::loadScript(const QString& scriptFilename, bool isUs
|
||||||
return scriptEngine;
|
return scriptEngine;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptEngine* ScriptEngines::getScriptEngine(const QString& scriptHash) {
|
ScriptEngine* ScriptEngines::getScriptEngine(const QString& rawScriptUrl) {
|
||||||
ScriptEngine* result = nullptr;
|
ScriptEngine* result = nullptr;
|
||||||
{
|
{
|
||||||
QReadLocker lock(&_scriptEnginesHashLock);
|
QReadLocker lock(&_scriptEnginesHashLock);
|
||||||
auto it = _scriptEnginesHash.find(scriptHash);
|
const QString scriptURLString = normalizeScriptUrl(rawScriptUrl);
|
||||||
|
auto it = _scriptEnginesHash.find(scriptURLString);
|
||||||
if (it != _scriptEnginesHash.end()) {
|
if (it != _scriptEnginesHash.end()) {
|
||||||
result = it.value();
|
result = it.value();
|
||||||
}
|
}
|
||||||
|
@ -377,15 +390,16 @@ ScriptEngine* ScriptEngines::getScriptEngine(const QString& scriptHash) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME - change to new version of ScriptCache loading notification
|
// FIXME - change to new version of ScriptCache loading notification
|
||||||
void ScriptEngines::onScriptEngineLoaded(const QString& scriptFilename) {
|
void ScriptEngines::onScriptEngineLoaded(const QString& rawScriptUrl) {
|
||||||
UserActivityLogger::getInstance().loadedScript(scriptFilename);
|
UserActivityLogger::getInstance().loadedScript(rawScriptUrl);
|
||||||
ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(sender());
|
ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(sender());
|
||||||
|
|
||||||
launchScriptEngine(scriptEngine);
|
launchScriptEngine(scriptEngine);
|
||||||
|
|
||||||
{
|
{
|
||||||
QWriteLocker lock(&_scriptEnginesHashLock);
|
QWriteLocker lock(&_scriptEnginesHashLock);
|
||||||
_scriptEnginesHash.insertMulti(scriptFilename, scriptEngine);
|
const QString scriptURLString = normalizeScriptUrl(rawScriptUrl);
|
||||||
|
_scriptEnginesHash.insertMulti(scriptURLString, scriptEngine);
|
||||||
}
|
}
|
||||||
emit scriptCountChanged();
|
emit scriptCountChanged();
|
||||||
}
|
}
|
||||||
|
@ -407,11 +421,11 @@ void ScriptEngines::launchScriptEngine(ScriptEngine* scriptEngine) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ScriptEngines::onScriptFinished(const QString& scriptName, ScriptEngine* engine) {
|
void ScriptEngines::onScriptFinished(const QString& rawScriptUrl, ScriptEngine* engine) {
|
||||||
bool removed = false;
|
bool removed = false;
|
||||||
{
|
{
|
||||||
QWriteLocker lock(&_scriptEnginesHashLock);
|
QWriteLocker lock(&_scriptEnginesHashLock);
|
||||||
const QString& scriptURLString = QUrl(scriptName).toString();
|
const QString scriptURLString = normalizeScriptUrl(rawScriptUrl);
|
||||||
for (auto it = _scriptEnginesHash.find(scriptURLString); it != _scriptEnginesHash.end(); ++it) {
|
for (auto it = _scriptEnginesHash.find(scriptURLString); it != _scriptEnginesHash.end(); ++it) {
|
||||||
if (it.value() == engine) {
|
if (it.value() == engine) {
|
||||||
_scriptEnginesHash.erase(it);
|
_scriptEnginesHash.erase(it);
|
||||||
|
|
Loading…
Reference in a new issue