1// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#include "private/pluginmanager_p.h"
6#include "pluginmanager.h"
7
8DPF_USE_NAMESPACE
9
10/** @brief PluginManager的构造函数
11 */
12PluginManager::PluginManager()
13 : d(new PluginManagerPrivate(this))
14{
15
16}
17
18/** @brief setPluginIID 设置插件IID
19 * @param const QString &pluginIID
20 * 可以设置任意字符作为当前IID,需要与与加载插件IID一致
21 * @return void
22 */
23void PluginManager::setPluginIID(const QString &pluginIID)
24{
25 d->setPluginIID(pluginIID);
26}
27
28/** @brief setPluginPaths 设置插件加载的路径
29 * @param const QStringList &pluginPaths 传入路径列表
30 * @return void
31 */
32void PluginManager::setPluginPaths(const QStringList &pluginPaths)
33{
34 d->setPluginPaths(pluginPaths);
35}
36
37/** @brief setServicePaths 设置当前插件服务加载的路径
38 * @param const QStringList &servicePaths 传入路径列表
39 * @return void
40 */
41void PluginManager::setServicePaths(const QStringList &servicePaths)
42{
43 d->setServicePaths(servicePaths);
44}
45
46PluginMetaObjectPointer PluginManager::pluginMetaObj(const QString &pluginName, const QString version) const
47{
48 return d->pluginMetaObj(pluginName, version);
49}
50
51bool PluginManager::loadPlugin(PluginMetaObjectPointer &pointer)
52{
53 return d->loadPlugin(pointer);
54}
55
56bool PluginManager::initPlugin(PluginMetaObjectPointer &pointer)
57{
58 return d->initPlugin(pointer);
59}
60
61bool PluginManager::startPlugin(PluginMetaObjectPointer &pointer)
62{
63 return d->startPlugin(pointer);
64}
65
66void PluginManager::stopPlugin(PluginMetaObjectPointer &pointer)
67{
68 return d->stopPlugin(pointer);
69}
70
71/** @brief readPlugins 读取插件元数据
72 * @details [此函数是线程安全的]
73 * 读取当前设置插件路径下的所有插件元数据
74 * @return void
75 */
76bool PluginManager::readPlugins()
77{
78 return d->readPlugins();
79}
80
81/** @brief loadPlugins 加载所有的插件
82 * @pre 需要先执行readPlugins方法
83 * @details [此函数是线程安全的]
84 * 加载所有插件,内部使用Qt类QPluginLoader
85 * @return void
86 */
87bool PluginManager::loadPlugins()
88{
89 return d->loadPlugins();
90}
91
92/** @brief initPlugins 执行所有插件initialized接口
93 * @pre 需要先执行loadPlugins方法
94 * @details [此函数是线程安全的]
95 * 调用插件接口Plugin中initialized函数,
96 * @return void
97 */
98void PluginManager::initPlugins()
99{
100 d->initPlugins();
101}
102
103/** @brief startPlugins 执行所有插件代码Plugin::start接口
104 * @pre 执行initPlugins后插件执行的函数,
105 * 否则可能遇到未知崩溃,
106 * 因为该操作的存在是未定义的。
107 * @details [此函数是线程安全的]
108 * 调用插件接口Plugin中start函数
109 * @return void
110 */
111void PluginManager::startPlugins()
112{
113 d->startPlugins();
114}
115
116/** @brief stopPlugins 执行所有插件代码Plugin::stop接口
117 * @pre 执行startPlugins后插件执行的函数,
118 * 否则可能遇到未知崩溃,
119 * 因为该操作的存在是未定义的。
120 * @details [此函数是线程安全的]
121 * 调用插件接口Plugin中stop函数,并且卸载加载的插件。
122 * @return void
123 */
124void PluginManager::stopPlugins()
125{
126 d->stopPlugins();
127}
128
129void PluginManager::setSettings(PluginSetting *settings)
130{
131 d->setSettings(settings);
132}
133
134void PluginManager::writeSettings()
135{
136 d->writeSettings();
137}
138
139QHash<QString, QQueue<PluginMetaObjectPointer> > PluginManager::pluginCollections()
140{
141 return d->pluginCategories;
142}
143
144/** @brief pluginIID 获取插件标识IID
145 * @return QString 返回设置的IID,默认为空
146 */
147QString PluginManager::pluginIID() const
148{
149 return d->pluginIID();
150}
151
152/** @brief pluginPaths 获取插件路径
153 * @return QString 返回设置的插件路径,默认为空
154 */
155QStringList PluginManager::pluginPaths() const
156{
157 return d->pluginPaths();
158}
159
160/** @brief servicePaths 获取插件服务路径
161 * @return QString 返回设置的插件服务路径,默认为空
162 */
163QStringList PluginManager::servicePaths() const
164{
165 return d->servicePaths();
166}
167