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 }