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 From 84b04d88723ef05f7873082c235ecfd56facf934 Mon Sep 17 00:00:00 2001 From: saturneric Date: Thu, 29 Feb 2024 22:36:25 +0800 Subject: feat: add prefix GF to all sdk and module symbols --- src/module/GpgFrontendModuleInit.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src/module/GpgFrontendModuleInit.cpp') diff --git a/src/module/GpgFrontendModuleInit.cpp b/src/module/GpgFrontendModuleInit.cpp index 2b1d8ac9..b03dbab2 100644 --- a/src/module/GpgFrontendModuleInit.cpp +++ b/src/module/GpgFrontendModuleInit.cpp @@ -28,9 +28,7 @@ #include "GpgFrontendModuleInit.h" -#include - -#include "Module.h" +#include "core/module/ModuleManager.h" #include "core/thread/Task.h" #include "core/thread/TaskRunnerGetter.h" -- cgit v1.2.3 From 154ebea202d64669143ee6bb33f6327d141343c3 Mon Sep 17 00:00:00 2001 From: saturneric Date: Sun, 3 Mar 2024 02:48:44 +0800 Subject: refactor: reduce core prebuild headers and isolate core to modules --- src/module/GpgFrontendModuleInit.cpp | 71 ------------------------------------ 1 file changed, 71 deletions(-) delete mode 100644 src/module/GpgFrontendModuleInit.cpp (limited to 'src/module/GpgFrontendModuleInit.cpp') diff --git a/src/module/GpgFrontendModuleInit.cpp b/src/module/GpgFrontendModuleInit.cpp deleted file mode 100644 index b03dbab2..00000000 --- a/src/module/GpgFrontendModuleInit.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/** - * Copyright (C) 2021 Saturneric - * - * This file is part of GpgFrontend. - * - * GpgFrontend is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * GpgFrontend is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GpgFrontend. If not, see . - * - * The initial version of the source code is inherited from - * the gpg4usb project, which is under GPL-3.0-or-later. - * - * All the source code of GpgFrontend was modified and released by - * Saturneric starting on May 12, 2021. - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#include "GpgFrontendModuleInit.h" - -#include "core/module/ModuleManager.h" -#include "core/thread/Task.h" -#include "core/thread/TaskRunnerGetter.h" - -namespace GpgFrontend::Module { - -void LoadGpgFrontendModules(ModuleInitArgs) { - // must init at default thread before core - Thread::TaskRunnerGetter::GetInstance().GetTaskRunner()->PostTask( - new Thread::Task( - [](const DataObjectPtr&) -> int { - 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; - } - - MODULE_LOG_INFO("the path of modules directory: {}", mods_path); - - 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 modules done."); - return 0; - }, - "modules_system_init_task")); -} - -void ShutdownGpgFrontendModules() {} - -} // namespace GpgFrontend::Module \ No newline at end of file -- cgit v1.2.3