|
25 | 25 | #include "parsers/containers.h" |
26 | 26 | #include "parsers/core.h" |
27 | 27 | #include "parsers/utils.h" |
28 | | -#include <QFile> |
| 28 | +#include <QDir> |
| 29 | +#include <QFileInfo> |
29 | 30 | #include <libinputactions/actions/ActionExecutor.h> |
30 | 31 | #include <libinputactions/handlers/KeyboardTriggerHandler.h> |
31 | 32 | #include <libinputactions/handlers/MouseTriggerHandler.h> |
|
38 | 39 | #include <libinputactions/scripting/ScriptingEngine.h> |
39 | 40 | #include <libinputactions/scripting/modules/core/Config.h> |
40 | 41 | #include <libinputactions/scripting/modules/core/CoreModule.h> |
| 42 | +#include <libinputactions/scripting/modules/core/Script.h> |
41 | 43 |
|
42 | 44 | namespace InputActions |
43 | 45 | { |
@@ -130,15 +132,27 @@ ConfigData ConfigLoader::createConfig(const QString &raw) |
130 | 132 | throw UncaughtScriptErrorConfigException(sourceNode, result); |
131 | 133 | } |
132 | 134 | } else if (const auto *fileNode = scriptNode->at("file", true)) { |
133 | | - const auto file = fileNode->as<QString>(); |
134 | | - if (!QFile::exists(file)) { |
| 135 | + const QFileInfo file(fileNode->as<QString>()); |
| 136 | + if (!file.exists()) { |
135 | 137 | throw InvalidValueConfigException(fileNode, "File does not exist."); |
136 | 138 | } |
137 | 139 |
|
138 | | - const auto result = g_scriptingEngine->importModule(file); |
| 140 | + const auto result = g_scriptingEngine->importModule(file.canonicalFilePath()); |
139 | 141 | if (result.isError()) { |
140 | 142 | throw UncaughtScriptErrorConfigException(fileNode, result); |
141 | 143 | } |
| 144 | + |
| 145 | + const auto defaultFunc = result.property("default"); |
| 146 | + if (!defaultFunc.isCallable()) { |
| 147 | + continue; |
| 148 | + } |
| 149 | + |
| 150 | + const auto rootDirectory = file.dir().absolutePath(); |
| 151 | + const auto defaultFuncResult = g_scriptingEngine->call(defaultFunc, |
| 152 | + {g_scriptingEngine->ensureEngine().newQObject(new Script(rootDirectory))}); |
| 153 | + if (defaultFuncResult.isError()) { |
| 154 | + throw UncaughtScriptErrorConfigException(fileNode, defaultFuncResult); |
| 155 | + } |
142 | 156 | } |
143 | 157 | } |
144 | 158 | } |
|
0 commit comments