DtkCore
DTK Core module
dconfigfile.h
1/*
2 * Copyright (C) 2021 Uniontech Technology Co., Ltd.
3 *
4 * Author: zccrs <[email protected]>
5 *
6 * Maintainer: zccrs <[email protected]>
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU Lesser General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 */
21#ifndef DCONFIGFILE_H
22#define DCONFIGFILE_H
23
24#include <dtkcore_global.h>
25#include <DObject>
26#include <QStringList>
27#include <QFlags>
28#include <QVariant>
29#include <QLocale>
30#include <QJsonDocument>
31#include <QDebug>
32
33QT_BEGIN_NAMESPACE
34class QIODevice;
35QT_END_NAMESPACE
36
37DCORE_BEGIN_NAMESPACE
38
39class DConfigMeta;
40class DConfigCache;
41class DConfigFilePrivate;
42class LIBDTKCORESHARED_EXPORT DConfigFile : public DObject{
43 D_DECLARE_PRIVATE(DConfigFile)
44public:
45 enum Flag {
46 NoOverride = 1 << 0,
47 Global = 1 << 1
48 };
49 Q_DECLARE_FLAGS(Flags, Flag)
50
52 ReadOnly,
53 ReadWrite
54 };
55
57 Private,
58 Public
59 };
60
61 struct Version {
62 quint16 major;
63 quint16 minor;
64 };
65
66 static constexpr Version supportedVersion();
67
68 explicit DConfigFile(const QString &appId, const QString &name,
69 const QString &subpath = QString());
70 explicit DConfigFile(const DConfigFile &other);
71
72 bool load(const QString &localPrefix = QString());
73 bool load(QIODevice *meta, const QList<QIODevice*> &overrides);
74
75 bool save(const QString &localPrefix = QString(), QJsonDocument::JsonFormat format = QJsonDocument::Indented,
76 bool sync = false) const;
77
78 bool isValid() const;
79 QVariant value(const QString &key, DConfigCache *userCache = nullptr) const;
80 bool setValue(const QString &key, const QVariant &value, const QString &callerAppid,
81 DConfigCache *userCache = nullptr);
82
83 DConfigCache *createUserCache(const uint uid);
84 DConfigCache *globalCache() const;
85
86 DConfigMeta *meta();
87
88protected:
89 friend QDebug operator<<(QDebug, const DConfigFile &);
90};
91
92class LIBDTKCORESHARED_EXPORT DConfigMeta {
93public:
94 virtual ~DConfigMeta();
95 virtual DConfigFile::Version version() const = 0;
96 virtual void setVersion(quint16 major, quint16 minor) = 0;
97
98 virtual bool load(const QString &localPrefix = QString()) = 0;
99
100 virtual bool load(QIODevice *meta, const QList<QIODevice*> &overrides) = 0;
101
102 virtual QStringList keyList() const = 0;
103 virtual DConfigFile::Flags flags(const QString &key) const = 0;
104 virtual DConfigFile::Permissions permissions(const QString &key) const = 0;
105 virtual DConfigFile::Visibility visibility(const QString &key) const = 0;
106 virtual int serial(const QString &key) const = 0;
107
108 virtual QString displayName(const QString &key, const QLocale &locale) = 0;
109 virtual QString description(const QString &key, const QLocale &locale) = 0;
110
111 virtual QString metaPath(const QString &localPrefix = QString(), bool *useAppId = nullptr) const = 0;
112 virtual QStringList allOverrideDirs(const bool useAppId, const QString &prefix = QString()) const = 0;
113
114 virtual QVariant value(const QString &key) const = 0;
115};
116
117class LIBDTKCORESHARED_EXPORT DConfigCache {
118public:
119 virtual ~DConfigCache();
120
121 virtual bool load(const QString &localPrefix = QString()) = 0;
122 virtual bool save(const QString &localPrefix = QString(),
123 QJsonDocument::JsonFormat format = QJsonDocument::Indented, bool sync = false) = 0;
124 virtual bool isGlobal() const = 0;
125
126 virtual void remove(const QString &key) = 0;
127 virtual QStringList keyList() const = 0;
128 virtual bool setValue(const QString &key, const QVariant &value, const int serial,
129 const uint uid, const QString &callerAppid) = 0;
130 virtual QVariant value(const QString &key) const = 0;
131 virtual int serial(const QString &key) const = 0;
132 virtual uint uid() const = 0;
133};
134
135#ifndef QT_NO_DEBUG_STREAM
136Q_CORE_EXPORT QDebug operator<<(QDebug, const DConfigFile &);
137#endif
138
139Q_DECLARE_OPERATORS_FOR_FLAGS(DConfigFile::Flags)
140
141DCORE_END_NAMESPACE
142
143#endif // DCONFIGFILE_H
提供配置文件的用户和全局运行缓存访问接口.
Definition: dconfigfile.h:117
virtual bool setValue(const QString &key, const QVariant &value, const int serial, const uint uid, const QString &callerAppid)=0
设置缓存中的值 key 配置项名称 value 需要设置的值 uid 设置时的用户id callerAppid 设置时的应用id
virtual bool save(const QString &localPrefix=QString(), QJsonDocument::JsonFormat format=QJsonDocument::Indented, bool sync=false)=0
保存缓存的值到磁盘中 localPrefix 为目录前缀 format 保存格式 sync 是否立即刷新
virtual void remove(const QString &key)=0
删除缓存中的配置项 key 配置项名称
virtual QStringList keyList() const =0
返回配置内容的所有配置项
virtual int serial(const QString &key) const =0
返回配置项的单调递增值 key 配置项名称
virtual bool isGlobal() const =0
是否是全局缓存
virtual QVariant value(const QString &key) const =0
获取缓存中的值 key 配置项名称
virtual uint uid() const =0
用户标识,为全局缓存时,uid为非用户标识的特定值
virtual bool load(const QString &localPrefix=QString())=0
解析缓存配置文件
规范配置文件读写的相关接口的配置文件实现.
Definition: dconfigfile.h:42
Flag
Definition: dconfigfile.h:45
Permissions
Definition: dconfigfile.h:51
Visibility
Definition: dconfigfile.h:56
提供配置文件的原型和覆盖机制的访问接口.
Definition: dconfigfile.h:92
virtual DConfigFile::Visibility visibility(const QString &key) const =0
返回指定配置项的可见性 key 配置项名称
virtual DConfigFile::Flags flags(const QString &key) const =0
返回指定配置项的特性 key 配置项名称, NoOverride为此配置项不可被覆盖, Global为忽略用户身份
virtual bool load(QIODevice *meta, const QList< QIODevice * > &overrides)=0
解析配置文件流 meta 为原型流 overrides 为覆盖机制查找的文件流
virtual DConfigFile::Version version() const =0
返回配置版本信息.
virtual QString metaPath(const QString &localPrefix=QString(), bool *useAppId=nullptr) const =0
返回描述文件的路径 localPrefix 目录的所有需要查找的覆盖机制目录
virtual DConfigFile::Permissions permissions(const QString &key) const =0
返回指定配置项的权限 key 配置项名称
virtual int serial(const QString &key) const =0
返回配置项的单调递增值 key 配置项名称
virtual QStringList allOverrideDirs(const bool useAppId, const QString &prefix=QString()) const =0
获得前缀为 prefix 目录的所有需要查找的覆盖机制目录 userAppId 是否不使用通用目录
virtual QVariant value(const QString &key) const =0
meta初始值经过覆盖机制覆盖后的原始值 key 配置项名称
virtual bool load(const QString &localPrefix=QString())=0
解析配置文件 localPrefix 为目录前缀
virtual QString description(const QString &key, const QLocale &locale)=0
返回指定配置项的描述信息 key 配置项名称 locale 为语言版本
virtual QString displayName(const QString &key, const QLocale &locale)=0
返回指定配置项的显示名 key 配置项名称 locale 为语言版本
virtual void setVersion(quint16 major, quint16 minor)=0
设置配置版本信息 major 主板本号 minor 次版本号
virtual QStringList keyList() const =0
返回配置内容的所有配置项
一些宏的定义.
Definition: dobject.h:38
版本信息
Definition: dconfigfile.h:61