File indexing completed on 2025-03-09 04:46:42
0001 /* 0002 SPDX-FileCopyrightText: 2015-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "shorturlenginepluginmanager.h" 0008 #include "shorturlengineplugin.h" 0009 #include <KPluginFactory> 0010 #include <KPluginMetaData> 0011 #include <QFileInfo> 0012 #include <QList> 0013 0014 class ShortUrlEnginePluginInfo 0015 { 0016 public: 0017 KPluginMetaData data; 0018 QString metaDataFileNameBaseName; 0019 QString pluginName; 0020 ShortUrlEnginePlugin *plugin = nullptr; 0021 }; 0022 0023 class ShortUrlEnginePluginManagerPrivate 0024 { 0025 public: 0026 explicit ShortUrlEnginePluginManagerPrivate(ShortUrlEnginePluginManager *qq) 0027 : q(qq) 0028 { 0029 } 0030 0031 void initializePlugins(); 0032 void loadPlugin(ShortUrlEnginePluginInfo *item); 0033 [[nodiscard]] QList<ShortUrlEnginePlugin *> pluginsList() const; 0034 QList<ShortUrlEnginePluginInfo> mPluginList; 0035 ShortUrlEnginePluginManager *const q; 0036 }; 0037 0038 void ShortUrlEnginePluginManagerPrivate::initializePlugins() 0039 { 0040 const QList<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("pim6/pimcommon/shorturlengine")); 0041 0042 QListIterator<KPluginMetaData> i(plugins); 0043 i.toBack(); 0044 while (i.hasPrevious()) { 0045 ShortUrlEnginePluginInfo info; 0046 const KPluginMetaData data = i.previous(); 0047 info.metaDataFileNameBaseName = QFileInfo(data.fileName()).baseName(); 0048 info.pluginName = data.name(); 0049 info.data = data; 0050 0051 info.plugin = nullptr; 0052 mPluginList.push_back(info); 0053 } 0054 const QList<ShortUrlEnginePluginInfo>::iterator end(mPluginList.end()); 0055 for (QList<ShortUrlEnginePluginInfo>::iterator it = mPluginList.begin(); it != end; ++it) { 0056 loadPlugin(&(*it)); 0057 } 0058 } 0059 0060 void ShortUrlEnginePluginManagerPrivate::loadPlugin(ShortUrlEnginePluginInfo *item) 0061 { 0062 if (auto plugin = KPluginFactory::instantiatePlugin<ShortUrlEnginePlugin>(item->data, q, QVariantList() << item->metaDataFileNameBaseName).plugin) { 0063 item->plugin = plugin; 0064 item->plugin->setPluginName(item->pluginName); 0065 } 0066 } 0067 0068 QList<ShortUrlEnginePlugin *> ShortUrlEnginePluginManagerPrivate::pluginsList() const 0069 { 0070 QList<ShortUrlEnginePlugin *> lst; 0071 QList<ShortUrlEnginePluginInfo>::ConstIterator end(mPluginList.constEnd()); 0072 for (QList<ShortUrlEnginePluginInfo>::ConstIterator it = mPluginList.constBegin(); it != end; ++it) { 0073 if ((*it).plugin) { 0074 lst << (*it).plugin; 0075 } 0076 } 0077 return lst; 0078 } 0079 0080 ShortUrlEnginePluginManager::ShortUrlEnginePluginManager(QObject *parent) 0081 : QObject(parent) 0082 , d(new ShortUrlEnginePluginManagerPrivate(this)) 0083 { 0084 d->initializePlugins(); 0085 } 0086 0087 ShortUrlEnginePluginManager::~ShortUrlEnginePluginManager() = default; 0088 0089 ShortUrlEnginePluginManager *ShortUrlEnginePluginManager::self() 0090 { 0091 static ShortUrlEnginePluginManager s_self; 0092 return &s_self; 0093 } 0094 0095 QList<ShortUrlEnginePlugin *> ShortUrlEnginePluginManager::pluginsList() const 0096 { 0097 return d->pluginsList(); 0098 } 0099 0100 #include "moc_shorturlenginepluginmanager.cpp"