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"