QtCanpool 3.3.0
载入中...
搜索中...
未找到
qxpluginspec.cpp
浏览该文件的文档.
1
5#include "qxpluginspec.h"
6
7#include "qxplugin.h"
8
9#include <QtCore/QJsonArray>
10#include <QtCore/QJsonValue>
11
13
14class QxPluginSpecPrivate
15{
16 QX_DECLARE_PUBLIC(QxPluginSpec)
17public:
18 QString filePath;
19 QString id;
20 QVersionNumber version;
21 QVersionNumber compatVersion;
22 QString vendor;
23 QString copyright;
24 QString category;
25 QString description;
26 QString url;
27 QStringList dependencies;
28 QStringList optionalDependencies;
29 bool enabledByDefault = true;
30 QxPluginState state = QxPluginState::Invalid;
31 QxPlugin *plugin = Q_NULLPTR;
34 QString error;
35};
36
37QxPluginSpec::QxPluginSpec()
38 : d_ptr(new QxPluginSpecPrivate)
39{
40}
41
43
44QString QxPluginSpec::id() const
45{
46 Q_D(const QxPluginSpec);
47 return d->id;
48}
49
50QVersionNumber QxPluginSpec::version() const
51{
52 Q_D(const QxPluginSpec);
53 return d->version;
54}
55
56QVersionNumber QxPluginSpec::compatVersion() const
57{
58 Q_D(const QxPluginSpec);
59 return d->compatVersion;
60}
61
62QString QxPluginSpec::vendor() const
63{
64 Q_D(const QxPluginSpec);
65 return d->vendor;
66}
67
69{
70 Q_D(const QxPluginSpec);
71 return d->copyright;
72}
73
75{
76 Q_D(const QxPluginSpec);
77 return d->category;
78}
79
81{
82 Q_D(const QxPluginSpec);
83 return d->description;
84}
85
86QString QxPluginSpec::url() const
87{
88 Q_D(const QxPluginSpec);
89 return d->url;
90}
91
92QStringList QxPluginSpec::dependencies() const
93{
94 Q_D(const QxPluginSpec);
95 return d->dependencies;
96}
97
99{
100 Q_D(const QxPluginSpec);
101 return d->optionalDependencies;
102}
103
105{
106 Q_D(const QxPluginSpec);
107 return d->enabledByDefault;
108}
109
111{
112 Q_D(const QxPluginSpec);
113 return d->state == QxPluginState::Disabled;
114}
115
117{
118 Q_D(const QxPluginSpec);
119 return d->state;
120}
121
123{
124 Q_D(const QxPluginSpec);
125 return d->plugin;
126}
127
129{
130 Q_D(const QxPluginSpec);
131 return d->filePath;
132}
133
134QString QxPluginSpec::error() const
135{
136 Q_D(const QxPluginSpec);
137 return d->error;
138}
139
140bool QxPluginSpec::read(const QString &filePath, const QJsonObject &metaData)
141{
142 Q_D(QxPluginSpec);
143 d->filePath = filePath;
144 d->state = QxPluginState::Invalid;
145 d->error.clear();
146
147 const QString name = metaData.value(QStringLiteral("Name")).toString();
148 if (name.isEmpty()) {
149 d->error = QStringLiteral("plugin metadata has no \"Name\"");
150 return false;
151 }
152 d->id = name;
153
154 QVersionNumber ver = QVersionNumber::fromString(metaData.value(QStringLiteral("Version")).toString());
155 if (ver.isNull())
156 ver = QVersionNumber(1, 0, 0);
157 d->version = ver;
158 QVersionNumber compat = QVersionNumber::fromString(metaData.value(QStringLiteral("CompatVersion")).toString());
159 if (compat.isNull())
160 compat = ver;
161 d->compatVersion = compat;
162
163 d->vendor = metaData.value(QStringLiteral("Vendor")).toString();
164 d->copyright = metaData.value(QStringLiteral("Copyright")).toString();
165 d->category = metaData.value(QStringLiteral("Category")).toString();
166 d->description = metaData.value(QStringLiteral("Description")).toString();
167 d->url = metaData.value(QStringLiteral("Url")).toString();
168 d->enabledByDefault = metaData.value(QStringLiteral("EnabledByDefault")).toBool(true);
169
170 const QJsonValue deps = metaData.value(QStringLiteral("Dependencies"));
171 if (!deps.isUndefined()) {
172 if (!deps.isArray()) {
173 d->error = QStringLiteral("plugin '%1': \"Dependencies\" is not an array").arg(name);
174 return false;
175 }
176 for (const QJsonValue &entry : deps.toArray()) {
177 const QJsonObject obj = entry.toObject();
178 const QString depName = obj.value(QStringLiteral("Name")).toString();
179 if (depName.isEmpty())
180 continue;
181 const QString type = obj.value(QStringLiteral("Type")).toString();
182 if (type == QStringLiteral("optional")) {
183 d->optionalDependencies.append(depName);
184 } else if (type != QStringLiteral("test")) {
185 // "test" dependencies are force-loaded for a test run only and do
186 // not affect load order. Nothing here has a test mode, so the
187 // entry is read and dropped rather than mistaken for a soft edge
188 // that would reorder the run behind the caller's back. Anything
189 // else - an explicit "required", or no Type at all - is a hard
190 // dependency, which is what the metadata means by a bare entry.
191 d->dependencies.append(depName);
192 }
193 }
194 }
195
196 d->state = QxPluginState::Read;
197 return true;
198}
199
200void QxPluginSpec::setState(QxPluginState state)
201{
202 Q_D(QxPluginSpec);
203 d->state = state;
204}
205
206void QxPluginSpec::setError(const QString &error)
207{
208 Q_D(QxPluginSpec);
209 d->error = error;
210}
211
212void QxPluginSpec::setPlugin(QxPlugin *plugin)
213{
214 Q_D(QxPluginSpec);
215 d->plugin = plugin;
216}
217
A read-only view of one plugin's metadata, plus the runtime state the manager attaches to it.
QString error() const
Why the plugin is not running; empty when it runs or is only skipped by default.
QString copyright() const
QVersionNumber version() const
QString description() const
bool read(const QString &filePath, const QJsonObject &metaData)
Fills the spec from metadata; returns false (and records error()) on a malformed document.
bool isEnabledByDefault() const
True when the plugin starts unless explicitly disabled (EnabledByDefault).
QString filePath() const
Path of the metadata file (dynamic) or the registration key (static).
QStringList optionalDependencies() const
Optional dependency ids (Type == "optional" in the metadata), in declaration order.
QxPluginState state() const
QxPlugin * plugin() const
The live instance, or null until Loaded.
QString category() const
QString vendor() const
bool isDisabled() const
True when the plugin will not run: forced off, skipped by default, or failed.
QString id() const
Stable plugin id; also the base name of its library and metadata file.
QStringList dependencies() const
Required dependency ids, in declaration order.
QVersionNumber compatVersion() const
Lowest host version the plugin still supports; the host must be in [compatVersion,...
Copyright (C) 2026 maminjie canpool@163.com SPDX-License-Identifier: MulanPSL-2.0
QxPluginState
Lifecycle state of a single plugin, as the manager drives it:
#define QX_DECLARE_PUBLIC(Class)
#define Q_NULLPTR
Copyleft (C) 2025 maminjie canpool@163.com SPDX-License-Identifier: MulanPSL-2.0
#define QX_FINI_PRIVATE()
#define QX_PLUGIN_BEGIN_NAMESPACE
#define QX_PLUGIN_END_NAMESPACE
const char * name
Definition qxtheme.cpp:25
const char * id
Definition qxtheme.cpp:24