7#include "viewerpluginmanager.h"
8#include "messageviewer_debug.h"
9#include "viewerplugin.h"
11#include <KPluginFactory>
12#include <KPluginMetaData>
13#include <KSharedConfig>
16using namespace MessageViewer;
21 ViewerPluginInfo() =
default;
24 QString metaDataFileNameBaseName;
25 QString metaDataFileName;
26 PimCommon::PluginUtilData pluginData;
27 MessageViewer::ViewerPlugin *plugin =
nullptr;
28 bool isEnabled =
false;
31class MessageViewer::ViewerPluginManagerPrivate
34 explicit ViewerPluginManagerPrivate(ViewerPluginManager *qq)
39 bool initializePluginList();
40 void loadPlugin(ViewerPluginInfo *item);
41 [[nodiscard]] QList<MessageViewer::ViewerPlugin *> pluginsList()
const;
42 [[nodiscard]] QList<PimCommon::PluginUtilData> pluginDataList()
const;
44 QString pluginDirectory;
47 [[nodiscard]] QString configGroupName()
const;
48 [[nodiscard]] QString configPrefixSettingKey()
const;
49 ViewerPlugin *pluginFromIdentifier(
const QString &
id);
52 QList<ViewerPluginInfo> mPluginList;
53 QList<PimCommon::PluginUtilData> mPluginDataList;
54 ViewerPluginManager *
const q;
61 return QStringLiteral(
"2.0");
65QString ViewerPluginManagerPrivate::configGroupName()
const
67 return QStringLiteral(
"PluginMessageViewer%1").
arg(pluginName);
70QString ViewerPluginManagerPrivate::configPrefixSettingKey()
const
72 return QStringLiteral(
"MessageViewerPlugins");
75bool ViewerPluginManagerPrivate::initializePluginList()
77 if (!mPluginList.isEmpty()) {
80 if (pluginDirectory.isEmpty()) {
89 const QPair<QStringList, QStringList> pair = PimCommon::PluginUtil::loadPluginSetting(configGroupName(), configPrefixSettingKey());
90 QListIterator<KPluginMetaData> i(plugins);
92 while (i.hasPrevious()) {
93 ViewerPluginInfo info;
95 const KPluginMetaData data = i.previous();
98 info.pluginData = PimCommon::PluginUtil::createPluginMetaData(data);
100 const bool isPluginActivated =
101 PimCommon::PluginUtil::isPluginActivated(pair.first, pair.second, info.pluginData.mEnableByDefault, info.pluginData.mIdentifier);
102 info.isEnabled = isPluginActivated;
103 info.metaDataFileNameBaseName = QFileInfo(data.
fileName()).baseName();
104 info.metaDataFileName = data.
fileName();
107 if (pluginVersion() == data.
version()) {
108 info.plugin =
nullptr;
109 mPluginList.push_back(info);
111 qCWarning(MESSAGEVIEWER_LOG) <<
"Plugin name :" << data.
name() <<
" doesn't have correct plugin version. Please update it";
114 QList<ViewerPluginInfo>::iterator
end(mPluginList.end());
115 for (QList<ViewerPluginInfo>::iterator it = mPluginList.begin(); it != end; ++it) {
121void ViewerPluginManagerPrivate::loadPlugin(ViewerPluginInfo *item)
123 if (
auto plugin = KPluginFactory::instantiatePlugin<MessageViewer::ViewerPlugin>(item->data, q, QVariantList() << item->metaDataFileName).plugin) {
124 item->plugin = plugin;
125 item->plugin->setIsEnabled(item->isEnabled);
126 item->pluginData.mHasConfigureDialog = item->plugin->hasConfigureDialog();
127 mPluginDataList.append(item->pluginData);
131QList<ViewerPlugin *> ViewerPluginManagerPrivate::pluginsList()
const
133 QList<MessageViewer::ViewerPlugin *> lst;
136 if (
auto plugin = (*it).plugin) {
143QList<PimCommon::PluginUtilData> ViewerPluginManagerPrivate::pluginDataList()
const
145 return mPluginDataList;
148ViewerPlugin *ViewerPluginManagerPrivate::pluginFromIdentifier(
const QString &
id)
152 if ((*it).pluginData.mIdentifier ==
id) {
159ViewerPluginManager::ViewerPluginManager(QObject *parent)
161 , d(new MessageViewer::ViewerPluginManagerPrivate(this))
165MessageViewer::ViewerPluginManager::~ViewerPluginManager() =
default;
167bool ViewerPluginManager::initializePluginList()
169 return d->initializePluginList();
174 static ViewerPluginManager s_self;
178QList<MessageViewer::ViewerPlugin *> ViewerPluginManager::pluginsList()
const
180 return d->pluginsList();
183void ViewerPluginManager::setPluginDirectory(
const QString &directory)
185 d->pluginDirectory = directory;
188QString ViewerPluginManager::pluginDirectory()
const
190 return d->pluginDirectory;
193QList<PimCommon::PluginUtilData> ViewerPluginManager::pluginsDataList()
const
195 return d->pluginDataList();
198QString ViewerPluginManager::configGroupName()
const
200 return d->configGroupName();
203QString ViewerPluginManager::configPrefixSettingKey()
const
205 return d->configPrefixSettingKey();
208MessageViewer::ViewerPlugin *ViewerPluginManager::pluginFromIdentifier(
const QString &
id)
210 return d->pluginFromIdentifier(
id);
213void ViewerPluginManager::setPluginName(
const QString &pluginName)
215 d->pluginName = pluginName;
218QString ViewerPluginManager::pluginName()
const
220 return d->pluginName;
223#include "moc_viewerpluginmanager.cpp"
The ViewerPluginManager class.
const QList< QKeySequence > & end()
QString arg(Args &&... args) const const