File indexing completed on 2024-05-05 05:48:39

0001 /*
0002     SPDX-FileCopyrightText: 2010 Volker Lanz <vl@fidra.de>
0003     SPDX-FileCopyrightText: 2014-2021 Andrius Štikonas <andrius@stikonas.eu>
0004     SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org>
0005     SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho <caiojcarvalho@gmail.com>
0006 
0007     SPDX-License-Identifier: GPL-3.0-or-later
0008 */
0009 
0010 #include "backend/corebackendmanager.h"
0011 #include "backend/corebackend.h"
0012 
0013 #include <QCoreApplication>
0014 #include <QDebug>
0015 #include <QString>
0016 #include <QVector>
0017 
0018 #include <KLocalizedString>
0019 #include <KPluginFactory>
0020 #include <KPluginMetaData>
0021 
0022 struct CoreBackendManagerPrivate
0023 {
0024     CoreBackend *m_Backend;
0025 };
0026 
0027 CoreBackendManager::CoreBackendManager() :
0028     d(std::make_unique<CoreBackendManagerPrivate>())
0029 {
0030 }
0031 
0032 CoreBackendManager::~CoreBackendManager()
0033 {
0034 }
0035 
0036 CoreBackendManager* CoreBackendManager::self()
0037 {
0038     static CoreBackendManager* instance = nullptr;
0039 
0040     if (instance == nullptr)
0041         instance = new CoreBackendManager;
0042 
0043     return instance;
0044 }
0045 
0046 CoreBackend* CoreBackendManager::backend()
0047 {
0048     return d->m_Backend;
0049 }
0050 
0051 QVector<KPluginMetaData> CoreBackendManager::list() const
0052 {
0053     return KPluginMetaData::findPlugins(QStringLiteral("kpmcore"));
0054 }
0055 
0056 bool CoreBackendManager::load(const QString& name)
0057 {
0058     if (backend())
0059         unload();
0060 
0061     QString path = QStringLiteral("kpmcore/") + name;
0062 
0063     KPluginMetaData metadata(path);
0064     d->m_Backend = KPluginFactory::instantiatePlugin<CoreBackend>(metadata).plugin;
0065 
0066     if (!backend()) {
0067         qWarning() << "Could not create instance of plugin  " << name;
0068         return false;
0069     }
0070 
0071     QString id = metadata.pluginId();
0072     QString version = metadata.version();
0073     if (id.isEmpty())
0074         return false;
0075 
0076     backend()->setId(id);
0077     backend()->setVersion(version);
0078     qDebug() << "Loaded backend plugin: " << backend()->id();
0079     return true;
0080 }
0081 
0082 void CoreBackendManager::unload()
0083 {
0084 }