diff --git a/src/libinputactions/config/ConfigIssue.cpp b/src/libinputactions/config/ConfigIssue.cpp index 9888b03..5158525 100644 --- a/src/libinputactions/config/ConfigIssue.cpp +++ b/src/libinputactions/config/ConfigIssue.cpp @@ -187,7 +187,7 @@ QString UnusedPropertyConfigIssue::message() const UncaughtScriptErrorConfigIssue::UncaughtScriptErrorConfigIssue(const Node *node, QJSValue error) : ConfigIssue(node) - , m_message(g_scriptingEngine->errorToString(error)) + , m_message(ScriptingEngine::errorToString(error)) { } @@ -209,7 +209,7 @@ QString MissingRequiredPropertyConfigException::message() const UncaughtScriptErrorConfigException::UncaughtScriptErrorConfigException(const Node *node, QJSValue error) : ConfigException(node) - , m_message(g_scriptingEngine->errorToString(error)) + , m_message(ScriptingEngine::errorToString(error)) { } diff --git a/src/libinputactions/config/ConfigLoader.cpp b/src/libinputactions/config/ConfigLoader.cpp index 2c12ddc..3479df6 100644 --- a/src/libinputactions/config/ConfigLoader.cpp +++ b/src/libinputactions/config/ConfigLoader.cpp @@ -154,8 +154,8 @@ ConfigData ConfigLoader::createConfig(const QString &raw) } const auto rootDirectory = file.dir().absolutePath(); - const auto defaultFuncResult = g_scriptingEngine->call(defaultFunc, - {g_scriptingEngine->ensureEngine().newQObject(new Script(rootDirectory))}); + const auto defaultFuncResult = ScriptingEngine::call(defaultFunc, + {g_scriptingEngine->ensureEngine().newQObject(new Script(rootDirectory))}); if (defaultFuncResult.isError()) { throw UncaughtScriptErrorConfigException(fileNode, defaultFuncResult); } diff --git a/src/libinputactions/scripting/JSFunctionAction.cpp b/src/libinputactions/scripting/JSFunctionAction.cpp index a40943f..f3d1167 100644 --- a/src/libinputactions/scripting/JSFunctionAction.cpp +++ b/src/libinputactions/scripting/JSFunctionAction.cpp @@ -32,7 +32,7 @@ JSFunctionAction::JSFunctionAction(QJSValue function, std::shared_ptrcall(m_function); + const auto result = ScriptingEngine::call(m_function); if (result.isError() && m_sourceNode) { g_configIssueManager->addIssue(UncaughtScriptErrorConfigIssue(m_sourceNode.get(), result)); } diff --git a/src/libinputactions/scripting/JSFunctionCondition.cpp b/src/libinputactions/scripting/JSFunctionCondition.cpp index 459967a..684c15a 100644 --- a/src/libinputactions/scripting/JSFunctionCondition.cpp +++ b/src/libinputactions/scripting/JSFunctionCondition.cpp @@ -32,7 +32,7 @@ JSFunctionCondition::JSFunctionCondition(QJSValue function, std::shared_ptrcall(m_function); + const auto result = ScriptingEngine::call(m_function); if (result.isError() && m_sourceNode) { g_configIssueManager->addIssue(UncaughtScriptErrorConfigIssue(m_sourceNode.get(), result)); return false; diff --git a/src/libinputactions/scripting/Promise.cpp b/src/libinputactions/scripting/Promise.cpp index 9983939..1399771 100644 --- a/src/libinputactions/scripting/Promise.cpp +++ b/src/libinputactions/scripting/Promise.cpp @@ -35,7 +35,7 @@ void Promise::fulfill() const QThreadHelpers::mainThread(), [this]() { if (m_fulfill.isCallable()) { - m_engine->call(m_fulfill); + ScriptingEngine::call(m_fulfill); } }, true); @@ -54,7 +54,7 @@ void Promise::reject(const QString &errorMessage) const void Promise::reject(const QJSValue &error) const { if (m_reject.isCallable()) { - m_engine->call(m_reject, {error}); + ScriptingEngine::call(m_reject, {error}); } } diff --git a/src/libinputactions/scripting/Promise.h b/src/libinputactions/scripting/Promise.h index c983ec5..de068f0 100644 --- a/src/libinputactions/scripting/Promise.h +++ b/src/libinputactions/scripting/Promise.h @@ -55,7 +55,7 @@ class Promise QThreadHelpers::mainThread(), [this, value = std::move(value)]() { if (m_fulfill.isCallable()) { - m_engine->call(m_fulfill, {m_engine->ensureEngine().toScriptValue(value)}); + ScriptingEngine::call(m_fulfill, {m_engine->ensureEngine().toScriptValue(value)}); } }, true); diff --git a/src/libinputactions/scripting/ScriptingEngine.cpp b/src/libinputactions/scripting/ScriptingEngine.cpp index e5cf46b..b716c46 100644 --- a/src/libinputactions/scripting/ScriptingEngine.cpp +++ b/src/libinputactions/scripting/ScriptingEngine.cpp @@ -194,7 +194,7 @@ QJSValue ScriptingEngine::importModule(const QString &fileName) return result; } -QJSValue ScriptingEngine::call(const QJSValue &function, const QJSValueList &args) const +QJSValue ScriptingEngine::call(const QJSValue &function, const QJSValueList &args) { const auto result = function.call(args); if (result.isError()) { @@ -204,7 +204,7 @@ QJSValue ScriptingEngine::call(const QJSValue &function, const QJSValueList &arg return result; } -QString ScriptingEngine::errorToString(const QJSValue &error) const +QString ScriptingEngine::errorToString(const QJSValue &error) { const auto name = error.property("name").toString(); const auto message = error.property("message").toString(); @@ -218,7 +218,7 @@ QString ScriptingEngine::errorToString(const QJSValue &error) const return QString("%1: %2\nFile: %3\nLine: %4\nStack:\n%5\n").arg(name, message, file, QString::number(lineNumber), QStringHelpers::indented(stack, 4)); } -void ScriptingEngine::logError(const QJSValue &error) const +void ScriptingEngine::logError(const QJSValue &error) { qCCritical(INPUTACTIONS_SCRIPTING).nospace().noquote() << "Uncaught script error\n" << errorToString(error); } diff --git a/src/libinputactions/scripting/ScriptingEngine.h b/src/libinputactions/scripting/ScriptingEngine.h index 1716c58..106a2b1 100644 --- a/src/libinputactions/scripting/ScriptingEngine.h +++ b/src/libinputactions/scripting/ScriptingEngine.h @@ -61,14 +61,6 @@ class ScriptingEngine : public QObject */ QJSValue importModule(const QString &fileName); - /** - * Same as QJSValue::call but with error logging. - */ - QJSValue call(const QJSValue &function, const QJSValueList &args = {}) const; - - QString errorToString(const QJSValue &error) const; - void logError(const QJSValue &error) const; - template QJSValue newFunction(TFunction &&function) { @@ -91,6 +83,14 @@ class ScriptingEngine : public QObject */ QJSEngine &ensureEngine(); + /** + * Same as QJSValue::call but with error logging. + */ + static QJSValue call(const QJSValue &function, const QJSValueList &args = {}); + + static QString errorToString(const QJSValue &error); + static void logError(const QJSValue &error); + static inline bool disabled = false; // temporary private slots: diff --git a/src/libinputactions/scripting/modules/core/VariableRegistryWrapper.cpp b/src/libinputactions/scripting/modules/core/VariableRegistryWrapper.cpp index 80553b3..f928f4d 100644 --- a/src/libinputactions/scripting/modules/core/VariableRegistryWrapper.cpp +++ b/src/libinputactions/scripting/modules/core/VariableRegistryWrapper.cpp @@ -80,7 +80,7 @@ VariableWrapper *VariableRegistryWrapper::registerComputedVariable(const QString } const auto getterWrapper = [this, name, type, getter = std::move(getter)](QVariant &value) { - const auto returnedValue = m_engine.call(getter); + const auto returnedValue = ScriptingEngine::call(getter); const auto variant = jsValueToVariant(returnedValue, type); if (!variant) {