文章目录

类Preferences就是用来处理项目的配置文件。它定义于src/musikcore/support/Preferences.h,继承自类IPreferences(类IPreferences定义于src/musikcore/sdk/IPreferences.h,仅定义了一些读取与设置配置项的虚函数,具体由子类实现)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
class Preferences : public mymusic::core::sdk::IPreferences {
public:
enum Mode {
ModeTransient,
ModeReadOnly,
ModeReadWrite,
ModeAutoSave
};
/* 调用plugins文件夹下每个动态链接库中的SetPreferences函数(如果存在的话)来设置每个插件的属性 */
static void LoadPluginPreferences();
/* 保存所有插件的配置项 */
static void SavePluginPreferences();

static mymusic::core::sdk::IPreferences* Unmanaged(const std::string& name);
/* 获取pluginName对应插件的属性 */
static std::shared_ptr<Preferences>
ForPlugin(const std::string& pluginName);
/* 获取c,mode对应组件的属性 */
static std::shared_ptr<Preferences>
ForComponent(const std::string& c, Mode mode = ModeAutoSave);
/* 在ModeAutoSave模式下,保存该属性的值再析构 */
~Preferences();

/* IPreferences (for plugin use) */
/* 在ModeTransient模式下,释放该属性结构体内存区域 */
virtual void Release() override;
/* 查询key对应的属性项是否被允许,若未设置该属性项的值则默认设置为false */
bool GetBool(const char* key, bool defaultValue = false) override;
/* 获取key对应的属性项的值,若未设置该属性项的值则默认设置为0 */
int GetInt(const char* key, int defaultValue = 0) override;
/* 获取key对应的属性项的值(double类型),若未设置该属性项的值则默认设置为0.0 */
double GetDouble(const char* key, double defaultValue = 0.0f) override;
/* 获取key对应的属性项的值,若未设置该属性项的值则默认设置为空字符串 */
int GetString(const char* key, char* dst, size_t size, const char* defaultValue = "") override;
/* 设置key对应的属性项的值 */
void SetBool(const char* key, bool value) override;
void SetInt(const char* key, int value) override;
void SetDouble(const char* key, double value) override;
void SetString(const char* key, const char* value) override;

void Save() override;

/* easier interface for internal use */
bool GetBool(const std::string& key, bool defaultValue = false);
int GetInt(const std::string& key, int defaultValue = 0);
double GetDouble(const std::string& key, double defaultValue = 0.0f);
std::string GetString(const std::string& key, const std::string& defaultValue = "");

void SetBool(const std::string& key, bool value);
void SetInt(const std::string& key, int value);
void SetDouble(const std::string& key, double value);
void SetString(const std::string& key, const char* value);
/* 获取json中所有的键 */
void GetKeys(std::vector<std::string>& target);
/* 判断key是否在json中 */
bool HasKey(const std::string& key);
/* 将key从json中删除 */
void Remove(const std::string& key);

private:
Preferences(const std::string& component, Mode mode);
void Load();
/* 对象的互斥锁 */
std::mutex mutex;
/* 存储属性项及其值 */
nlohmann::json json;
/* 该属性对象对应的组件名称 */
std::string component;
/* 该对象的属性项的值保存方式 */
Mode mode;
};