File indexing completed on 2024-05-12 05:11:07

0001 /*
0002    SPDX-FileCopyrightText: 2017-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "importmailpluginmanager.h"
0008 #include "abstractimporter.h"
0009 #include "importwizard_debug.h"
0010 #include <KPluginFactory>
0011 #include <KPluginMetaData>
0012 #include <kcoreaddons_version.h>
0013 
0014 namespace
0015 {
0016 QString pluginVersion()
0017 {
0018     return QStringLiteral("1.0");
0019 }
0020 }
0021 
0022 ImportMailPluginManager::ImportMailPluginManager(QObject *parent)
0023     : QObject(parent)
0024 {
0025     initializePluginList();
0026 }
0027 
0028 ImportMailPluginManager::~ImportMailPluginManager() = default;
0029 
0030 ImportMailPluginManager *ImportMailPluginManager::self()
0031 {
0032     static ImportMailPluginManager s_self;
0033     return &s_self;
0034 }
0035 
0036 bool ImportMailPluginManager::initializePluginList()
0037 {
0038     const QList<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("pim6/importwizard"));
0039     QListIterator<KPluginMetaData> i(plugins);
0040     i.toBack();
0041     while (i.hasPrevious()) {
0042         ImportMailPluginManagerInfo info;
0043         const KPluginMetaData data = i.previous();
0044 
0045         // 1) get plugin data => name/description etc.
0046         info.pluginData = createPluginMetaData(data);
0047         info.metaDataFileName = data.fileName();
0048         info.data = data;
0049         if (pluginVersion() == data.version()) {
0050             info.plugin = nullptr;
0051             mPluginList.push_back(info);
0052         } else {
0053             qCWarning(IMPORTWIZARD_LOG) << "Plugin " << data.name() << " doesn't have correction plugin version. It will not be loaded.";
0054         }
0055     }
0056     QList<ImportMailPluginManagerInfo>::iterator end(mPluginList.end());
0057     for (QList<ImportMailPluginManagerInfo>::iterator it = mPluginList.begin(); it != end; ++it) {
0058         loadPlugin(&(*it));
0059     }
0060     return true;
0061 }
0062 
0063 void ImportMailPluginManager::loadPlugin(ImportMailPluginManagerInfo *item)
0064 {
0065     if (auto plugin = KPluginFactory::instantiatePlugin<LibImportWizard::AbstractImporter>(item->data, this, QVariantList() << item->metaDataFileName).plugin) {
0066         item->plugin = plugin;
0067         mPluginDataList.append(item->pluginData);
0068     }
0069 }
0070 
0071 QList<LibImportWizard::AbstractImporter *> ImportMailPluginManager::pluginsList() const
0072 {
0073     QList<LibImportWizard::AbstractImporter *> lst;
0074     QList<ImportMailPluginManagerInfo>::ConstIterator end(mPluginList.constEnd());
0075     for (QList<ImportMailPluginManagerInfo>::ConstIterator it = mPluginList.constBegin(); it != end; ++it) {
0076         if (auto plugin = (*it).plugin) {
0077             lst << plugin;
0078         }
0079     }
0080     return lst;
0081 }
0082 
0083 PluginUtilData ImportMailPluginManager::createPluginMetaData(const KPluginMetaData &metaData)
0084 {
0085     PluginUtilData pluginData;
0086     pluginData.mName = metaData.name();
0087     pluginData.mIdentifier = metaData.pluginId();
0088     return pluginData;
0089 }
0090 
0091 #include "moc_importmailpluginmanager.cpp"