MCPcopy Create free account
hub / github.com/RGAA-Software/GoDesk / LoadAllPlugins

Method LoadAllPlugins

src/client/plugins/ct_plugin_manager.cpp:33–131  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

31 }
32
33 void ClientPluginManager::LoadAllPlugins() {
34 auto base_path = QCoreApplication::applicationDirPath();
35 auto base_data_path = QString::fromStdWString(FolderUtil::GetProgramDataPath()).toStdString();
36 LOGI("plugin base path: {}", base_path.toStdString());
37 QDir plugin_dir(base_path + R"(/gr_plugins_client)");
38 QStringList filters;
39 filters << QString("*%1").arg(".dll");
40 plugin_dir.setNameFilters(filters);
41
42 auto entryInfoList = plugin_dir.entryInfoList();
43 for (const auto &info: entryInfoList) {
44 auto target_plugin_path = base_path + R"(/gr_plugins_client/)" + info.fileName();
45 LOGI("Will load: {}", target_plugin_path.toStdString());
46
47 auto library = new QLibrary(target_plugin_path);
48 library->load();
49 auto fn_get_instance = (FnGetInstance)library->resolve("GetInstance");
50
51 auto func = (FnGetInstance) fn_get_instance;
52 if (func) {
53 auto plugin = (ClientPluginInterface*)func();
54 if (plugin) {
55 auto plugin_id = plugin->GetPluginId();
56 if (plugins_.contains(plugin_id)) {
57 LOGE("{} repeated loading.", plugin_id);
58 continue;
59 }
60
61 auto settings = tc::Settings::Instance();
62
63 // create it
64 auto filename = info.fileName();
65 auto param = ClientPluginParam {
66 .cluster_ = {
67 {"name", filename.toStdString()},
68 {"base_path", base_path.toStdString()},
69 {"base_data_path", base_data_path},
70 {"screen_recording_path", settings->screen_recording_path_},
71 {"clipboard_enabled", settings->clipboard_on_},
72 {"device_id", settings->device_id_.empty() ? settings->my_host_ : settings->device_id_},
73 {"stream_id", settings->stream_id_},
74 {"language", (int64_t)settings->language_},
75 {"stream_name", settings->stream_name_},
76 {"display_name", settings->display_name_},
77 {"display_remote_name", settings->display_remote_name_},
78 },
79 };
80
81 auto config_filepath = plugin_dir.path() + "/" + filename + ".toml";
82 if (QFile::exists(config_filepath)) {
83 try {
84 auto cfg = toml::parse_file(config_filepath.toStdString());
85 cfg.for_each([&](auto& k, auto& v) {
86 auto str_key = (std::string)k;
87 if constexpr (toml::is_string<decltype(v)>) {
88 auto str_value = toml::value<std::string>(v).get();
89 param.cluster_.insert({str_key, str_value});
90 }

Callers 1

InitPluginsManagerMethod · 0.45

Calls 6

pathMethod · 0.80
GetPluginIdMethod · 0.45
OnCreateMethod · 0.45
GetPluginNameMethod · 0.45
IsPluginEnabledMethod · 0.45
GetVersionNameMethod · 0.45

Tested by

no test coverage detected