From 12d70e1792a5b1ff08d4b58fb49fb9e58d6551a8 Mon Sep 17 00:00:00 2001 From: saturneric Date: Thu, 29 Feb 2024 00:32:43 +0800 Subject: feat: upgrade module system 1. load module and resolve symbols at runtime 2. restrict sdk functions and structures to c style 3. add some core api to support it --- src/module/GpgFrontendModuleInit.cpp | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'src/module/GpgFrontendModuleInit.cpp') diff --git a/src/module/GpgFrontendModuleInit.cpp b/src/module/GpgFrontendModuleInit.cpp index 6f88b9ec..2b1d8ac9 100644 --- a/src/module/GpgFrontendModuleInit.cpp +++ b/src/module/GpgFrontendModuleInit.cpp @@ -30,14 +30,10 @@ #include +#include "Module.h" #include "core/thread/Task.h" #include "core/thread/TaskRunnerGetter.h" -// integrated modules -#include "integrated/gnupg_info_gathering_module/GnuPGInfoGatheringModule.h" -#include "integrated/version_checking_module/VersionCheckingModule.h" -#include "spdlog/common.h" - namespace GpgFrontend::Module { void LoadGpgFrontendModules(ModuleInitArgs) { @@ -45,17 +41,28 @@ void LoadGpgFrontendModules(ModuleInitArgs) { Thread::TaskRunnerGetter::GetInstance().GetTaskRunner()->PostTask( new Thread::Task( [](const DataObjectPtr&) -> int { - MODULE_LOG_INFO("loading integrated module..."); + MODULE_LOG_INFO("loading modules..."); + + auto exec_binary_path = QCoreApplication::applicationDirPath(); + auto mods_path = exec_binary_path + "/mods"; + + if (!QDir(mods_path).exists()) { + MODULE_LOG_WARN("module directory not found, abort..."); + return -1; + } - // VersionCheckingModule - RegisterAndActivateModule< - Integrated::VersionCheckingModule::VersionCheckingModule>(); + MODULE_LOG_INFO("the path of modules directory: {}", mods_path); - // VersionCheckingModule - RegisterAndActivateModule(); + for (const auto& module_library_name : + QDir(mods_path).entryList(QStringList() << "*.so" + << "*.dll" + << "*.dylib", + QDir::Files)) { + ModuleManager::GetInstance().LoadModule(mods_path + "/" + + module_library_name); + } - MODULE_LOG_INFO("load integrated module done."); + MODULE_LOG_INFO("load modules done."); return 0; }, "modules_system_init_task")); -- cgit v1.2.3