7#include "plugineditormanager.h"
8#include "messagecomposer_debug.h"
9#include "plugineditor.h"
10#include <KPluginFactory>
11#include <KPluginMetaData>
18 PluginEditorInfo() =
default;
21 PimCommon::PluginUtilData pluginData;
22 QString metaDataFileNameBaseName;
23 QString metaDataFileName;
24 PluginEditor *plugin =
nullptr;
26 bool isEnabled =
true;
33 return QStringLiteral(
"1.0");
37class MessageComposer::PluginEditorManagerPrivate
40 PluginEditorManagerPrivate(PluginEditorManager *qq)
46 void loadPlugin(PluginEditorInfo *item);
47 [[nodiscard]] QList<PluginEditor *> pluginsList()
const;
48 [[nodiscard]] QList<PimCommon::PluginUtilData> pluginDataList()
const;
49 void initializePlugins();
51 [[nodiscard]] QString configGroupName()
const;
52 [[nodiscard]] QString configPrefixSettingKey()
const;
53 PluginEditor *pluginFromIdentifier(
const QString &
id);
56 QList<PluginEditorInfo> mPluginList;
57 QList<PimCommon::PluginUtilData> mPluginDataList;
58 PluginEditorManager *
const q;
61void PluginEditorManagerPrivate::initializePlugins()
65 const QPair<QStringList, QStringList> pair = PimCommon::PluginUtil::loadPluginSetting(configGroupName(), configPrefixSettingKey());
67 QListIterator<KPluginMetaData> i(plugins);
69 while (i.hasPrevious()) {
70 PluginEditorInfo info;
71 const KPluginMetaData data = i.previous();
74 info.pluginData = PimCommon::PluginUtil::createPluginMetaData(data);
76 const bool isPluginActivated =
77 PimCommon::PluginUtil::isPluginActivated(pair.first, pair.second, info.pluginData.mEnableByDefault, info.pluginData.mIdentifier);
78 info.isEnabled = isPluginActivated;
79 info.metaDataFileNameBaseName = QFileInfo(data.
fileName()).baseName();
80 info.metaDataFileName = data.
fileName();
88 if (pluginEditorVersion() == data.
version()) {
89 info.plugin =
nullptr;
90 mPluginList.push_back(info);
92 qCWarning(MESSAGECOMPOSER_LOG) <<
"Plugin " << data.
name() <<
" doesn't have correction plugin version. It will not be loaded.";
95 QList<PluginEditorInfo>::iterator
end(mPluginList.end());
96 for (QList<PluginEditorInfo>::iterator it = mPluginList.begin(); it != end; ++it) {
101void PluginEditorManagerPrivate::loadPlugin(PluginEditorInfo *item)
103 if (
auto plugin = KPluginFactory::instantiatePlugin<PluginEditor>(item->data, q, QVariantList() << item->metaDataFileName).plugin) {
104 item->plugin = plugin;
105 item->plugin->setIsEnabled(item->isEnabled);
106 item->pluginData.mHasConfigureDialog = item->plugin->hasConfigureDialog();
107 item->plugin->setOrder(item->order);
108 mPluginDataList.append(item->pluginData);
112QList<PluginEditor *> PluginEditorManagerPrivate::pluginsList()
const
114 QList<PluginEditor *> lst;
117 if (
auto plugin = (*it).plugin) {
124QList<PimCommon::PluginUtilData> PluginEditorManagerPrivate::pluginDataList()
const
126 return mPluginDataList;
129QString PluginEditorManagerPrivate::configGroupName()
const
131 return QStringLiteral(
"KMailPluginEditor");
134QString PluginEditorManagerPrivate::configPrefixSettingKey()
const
136 return QStringLiteral(
"KMailEditorPlugin");
139PluginEditor *PluginEditorManagerPrivate::pluginFromIdentifier(
const QString &
id)
143 if ((*it).pluginData.mIdentifier ==
id) {
150PluginEditorManager::PluginEditorManager(QObject *parent)
152 , d(new MessageComposer::PluginEditorManagerPrivate(this))
156PluginEditorManager::~PluginEditorManager() =
default;
160 static PluginEditorManager s_self;
164QList<PluginEditor *> PluginEditorManager::pluginsList()
const
166 return d->pluginsList();
169QList<PimCommon::PluginUtilData> PluginEditorManager::pluginsDataList()
const
171 return d->pluginDataList();
174QString PluginEditorManager::configGroupName()
const
176 return d->configGroupName();
179QString PluginEditorManager::configPrefixSettingKey()
const
181 return d->configPrefixSettingKey();
184PluginEditor *PluginEditorManager::pluginFromIdentifier(
const QString &
id)
186 return d->pluginFromIdentifier(
id);
189#include "moc_plugineditormanager.cpp"
The PluginEditorManager class.
const QList< QKeySequence > & end()
Simple interface that both EncryptJob and SignEncryptJob implement so the composer can extract some e...
QJsonValue value(QLatin1StringView key) const const
QVariant toVariant() const const
bool isValid() const const
int toInt(bool *ok) const const