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

Method LoadSkin

src/skin/skin_loader.cpp:17–78  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

15{
16
17 SkinInterface* SkinLoader::LoadSkin() {
18 std::string skin_name;
19#ifdef OPENSOURCE_BUILD
20 skin_name = "skin_opensource";
21#elif defined(OFFICIAL_BUILD)
22 skin_name = "skin_official";
23#else
24 skin_name = "skin_official";
25#endif
26 LOGI("Prebuilt skin name: {}", skin_name);
27
28 auto base_path = QCoreApplication::applicationDirPath();
29 if (skin_name.empty()) {
30 auto config_path = base_path + "/gr_skins/skin_config.toml";
31
32 toml::parse_result result;
33 try {
34 result = toml::parse_file(config_path.toStdString());
35 } catch (std::exception& e) {
36 LOGE("Parse skin config failed: {}, skin path: {}", e.what(), config_path.toStdString());
37 return nullptr;
38 }
39
40 skin_name = result["skin_name"].value_or("");
41 if (skin_name.empty()) {
42 LOGE("Skin name is empty!");
43 return nullptr;
44 }
45 }
46
47#ifdef WIN32
48 auto lib_name = skin_name + ".dll";
49#else
50 auto lib_name = skin_name + ".so";
51#endif
52 auto skin_path = base_path + "/gr_skins/" + lib_name.c_str();
53 LOGI("Target skin: {}", skin_path.toStdString());
54 auto library = new QLibrary(skin_path);
55 if (!library->load()) {
56 LOGE("Load skin dll failed: {}", skin_path.toStdString());
57 return nullptr;
58 }
59 auto fn_get_instance = (FnGetInstance)library->resolve("GetInstance");
60 auto func = (FnGetInstance)fn_get_instance;
61 if (!func) {
62 LOGE("Don't have GetInstance in: {}", lib_name);
63 return nullptr;
64 }
65
66 auto skin = (SkinInterface*)func();
67 if (!skin) {
68 LOGE("Can't exe GetInstance in skin: {}", lib_name);
69 return nullptr;
70 }
71
72 if (!skin->OnCreate(SkinParam{})) {
73 LOGE("Can't init skin: {}", lib_name);
74 return nullptr;

Callers

nothing calls this directly

Calls 1

OnCreateMethod · 0.45

Tested by

no test coverage detected