File indexing completed on 2024-05-12 05:14:53

0001 /*
0002  *  pluginmanager.h  -  plugin manager
0003  *  Program:  kalarm
0004  *  SPDX-FileCopyrightText: 2022 David Jarvie <djarvie@kde.org>
0005  *
0006  *  SPDX-License-Identifier: LGPL-2.0-or-later
0007  */
0008 
0009 #include "pluginmanager.h"
0010 
0011 #include "pluginbase.h"
0012 #include "kalarmpluginlib_debug.h"
0013 
0014 #include <KPluginFactory>
0015 #include <KPluginMetaData>
0016 
0017 namespace
0018 {
0019 QString pluginVersion()
0020 {
0021     return QStringLiteral("1.0");
0022 }
0023 }
0024 
0025 
0026 PluginManager::PluginManager(QObject* parent)
0027     : QObject(parent)
0028 {
0029     loadPlugins();
0030 }
0031 
0032 PluginManager::~PluginManager() = default;
0033 
0034 PluginManager* PluginManager::instance()
0035 {
0036     static PluginManager theInstance;
0037     return &theInstance;
0038 }
0039 
0040 void PluginManager::loadPlugins()
0041 {
0042     // Reset existing plugin data
0043     mAkonadiPlugin = nullptr;
0044 
0045     // Load plugins which are available
0046     const QList<KPluginMetaData> plugins = KPluginMetaData::findPlugins(
0047         QStringLiteral("pim6/kalarm"));
0048 
0049     for (const auto& metaData : plugins)
0050     {
0051         qCDebug(KALARMPLUGINLIB_LOG) << "PluginManager::loadPlugins: found " << metaData.pluginId();
0052         if (pluginVersion() != metaData.version())
0053             qCWarning(KALARMPLUGINLIB_LOG) << "Error! Plugin" << metaData.name() << "has wrong version";
0054         else
0055         {
0056             // Load the plugin
0057             auto plugin = KPluginFactory::instantiatePlugin<PluginBase>(metaData, this).plugin;
0058             if (plugin)
0059             {
0060                 if (metaData.pluginId() == QStringLiteral("akonadi"))
0061                     mAkonadiPlugin = (AkonadiPlugin*)plugin;
0062             }
0063         }
0064     }
0065 }
0066 
0067 AkonadiPlugin* PluginManager::akonadiPlugin() const
0068 {
0069     return mAkonadiPlugin;
0070 }
0071 
0072 #include "moc_pluginmanager.cpp"
0073 
0074 // vim: et sw=4: