617 lines · 23.1 KB · C++
RawDownload
    } else {        // connect to the appropriate signals of this script engine        connect(scriptEngine.data(), &ScriptEngine::scriptLoaded, this, &ScriptEngines::onScriptEngineLoaded);        connect(scriptEngine.data(), &ScriptEngine::errorLoadingScript, this, &ScriptEngines::onScriptEngineError);         // Shutdown Interface when script finishes, if requested        if (quitWhenFinished) {            connect(scriptEngine.data(), &ScriptEngine::finished, this, &ScriptEngines::quitWhenFinished);        }         // get the script engine object to load the script at the designated script URL        scriptEngine->loadURL(scriptUrl, reload);    }     return scriptEngine;} ScriptEnginePointer ScriptEngines::getScriptEngine(const QUrl& rawScriptURL) {    ScriptEnginePointer result;    {        QReadLocker lock(&_scriptEnginesHashLock);        const QUrl scriptURL = normalizeScriptURL(rawScriptURL);        auto it = _scriptEnginesHash.find(scriptURL);        if (it != _scriptEnginesHash.end()) {            result = it.value();        }    }    return result;} // FIXME - change to new version of ScriptCache loading notificationvoid ScriptEngines::onScriptEngineLoaded(const QString& rawScriptURL) {    UserActivityLogger::getInstance().loadedScript(rawScriptURL);    QSharedPointer<BaseScriptEngine> baseScriptEngine = qobject_cast<ScriptEngine*>(sender())->sharedFromThis();    ScriptEnginePointer scriptEngine = qSharedPointerCast<ScriptEngine>(baseScriptEngine);     launchScriptEngine(scriptEngine);     {        QWriteLocker lock(&_scriptEnginesHashLock);        QUrl url = QUrl(rawScriptURL);        QUrl normalized = normalizeScriptURL(url);        _scriptEnginesHash.insertMulti(normalized, scriptEngine);    }     // Update settings with new script    saveScripts();    emit scriptCountChanged();} void ScriptEngines::quitWhenFinished() {    qApp->quit();} int ScriptEngines::runScriptInitializers(ScriptEnginePointer scriptEngine) {    int ii=0;    for (auto initializer : _scriptInitializers) {        ii++;        initializer(scriptEngine);    }    return ii;} void ScriptEngines::launchScriptEngine(ScriptEnginePointer scriptEngine) {    connect(scriptEngine.data(), &ScriptEngine::finished, this, &ScriptEngines::onScriptFinished, Qt::DirectConnection);    connect(scriptEngine.data(), &ScriptEngine::loadScript, [this](const QString& scriptName, bool userLoaded) {        loadScript(scriptName, userLoaded);    });    connect(scriptEngine.data(), &ScriptEngine::reloadScript, [this](const QString& scriptName, bool userLoaded) {        loadScript(scriptName, userLoaded, false, false, true);    });     // register our application services and set it off on its own thread    runScriptInitializers(scriptEngine);     // FIXME disabling 'shift key' debugging for now.  If you start up the application with    // the shift key held down, it triggers a deadlock because of script interfaces running    // on the main thread    auto const wantDebug = scriptEngine->isDebuggable(); //  || (qApp->queryKeyboardModifiers() & Qt::ShiftModifier);     if (HIFI_SCRIPT_DEBUGGABLES && wantDebug) {        scriptEngine->runDebuggable();    } else {        scriptEngine->runInThread();    }} void ScriptEngines::onScriptFinished(const QString& rawScriptURL, ScriptEnginePointer engine) {    bool removed = false;    {        QWriteLocker lock(&_scriptEnginesHashLock);        const QUrl scriptURL = normalizeScriptURL(QUrl(rawScriptURL));        for (auto it = _scriptEnginesHash.find(scriptURL); it != _scriptEnginesHash.end(); ++it) {            if (it.value() == engine) {                _scriptEnginesHash.erase(it);                removed = true;                break;            }        }    }     if (removed && !_isReloading) {        // Update settings with removed script        saveScripts();        emit scriptCountChanged();    }} // FIXME - change to new version of ScriptCache loading notificationvoid ScriptEngines::onScriptEngineError(const QString& scriptFilename) {    qCDebug(scriptengine) << "Application::loadScript(), script failed to load...";    emit scriptLoadError(scriptFilename, "");} QString ScriptEngines::getDefaultScriptsLocation() const {    return PathUtils::defaultScriptsLocation().toString();}

Lines 501–617 of 617. Previous lines