aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/lua/luaplugin.cpp
diff options
context:
space:
mode:
authorMarcus Tillmanns <[email protected]>2025-01-30 08:46:05 +0100
committerMarcus Tillmanns <[email protected]>2025-02-10 14:23:10 +0000
commitcfda5829af61c44c515ce3ca2bd9c38f92ac2418 (patch)
treefc122c0797922f4329451e8337baf7bf022ee77c /src/plugins/lua/luaplugin.cpp
parente32613cfe203dee03b5795f471dd38a7e52a4872 (diff)
ExtensionSystem: Allow updating and removing plugins
Change-Id: Ie81e697c97fbfe0dc66346f42d467e1a697606c3 Reviewed-by: Eike Ziller <[email protected]>
Diffstat (limited to 'src/plugins/lua/luaplugin.cpp')
-rw-r--r--src/plugins/lua/luaplugin.cpp33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/plugins/lua/luaplugin.cpp b/src/plugins/lua/luaplugin.cpp
index e679516147e..27107364b09 100644
--- a/src/plugins/lua/luaplugin.cpp
+++ b/src/plugins/lua/luaplugin.cpp
@@ -416,9 +416,25 @@ public:
FilePaths folders = path.dirEntries(FileFilter({}, QDir::Dirs | QDir::NoDotAndDotDot));
for (const FilePath &folder : folders) {
- const FilePath script = folder / (folder.baseName() + ".lua");
- if (!script.exists())
+ FilePath script = folder / (folder.baseName() + ".lua");
+ if (!script.exists()) {
+ FilePaths contents = folder.dirEntries(QDir::Dirs | QDir::NoDotAndDotDot);
+ if (contents.empty())
+ continue;
+
+ for (const FilePath &subfolder : contents) {
+ script = subfolder / (subfolder.baseName() + ".lua");
+ if (!script.exists()) {
+ script.clear();
+ continue;
+ }
+ break;
+ }
+ }
+
+ if (script.isEmpty()) {
continue;
+ }
const expected_str<LuaPluginSpec *> result = loadPlugin(script);
@@ -430,6 +446,19 @@ public:
continue;
}
+ if (PluginManager::takePluginIdForRemoval((*result)->id())) {
+ auto removeResult = (*result)->removePluginFiles();
+ if (!removeResult) {
+ qWarning() << "Failed to remove plugin files" << script << ":"
+ << removeResult.error();
+ MessageManager::writeFlashing(
+ Tr::tr("Failed to remove plugin files of %1: %2")
+ .arg((*result)->id())
+ .arg(removeResult.error()));
+ }
+ continue;
+ }
+
plugins.insert(*result);
}
}