File indexing completed on 2024-05-12 03:54:09

0001 /*
0002     SPDX-FileCopyrightText: 2023 Alexander Lohnau <alexander.lohnau@gmx.de>
0003     SPDX-License-Identifier: LGPL-2.0-or-later
0004 */
0005 
0006 #include "kquickconfigmoduleloader.h"
0007 
0008 #include "kcmutils_debug.h"
0009 
0010 #include <KPluginFactory>
0011 #include <QJsonArray>
0012 #include <QQmlEngine>
0013 
0014 #include "kquickconfigmodule.h"
0015 
0016 std::weak_ptr<QQmlEngine> s_kcmutilsCreatedEngine;
0017 
0018 KPluginFactory::Result<KQuickConfigModule>
0019 KQuickConfigModuleLoader::loadModule(const KPluginMetaData &metaData, QObject *parent, const QVariantList &args, const std::shared_ptr<QQmlEngine> &engineArg)
0020 {
0021     const auto factoryResult = KPluginFactory::loadFactory(metaData);
0022     KPluginFactory::Result<KQuickConfigModule> result;
0023     if (!factoryResult) {
0024         result.errorReason = factoryResult.errorReason;
0025         result.errorString = factoryResult.errorString;
0026         result.errorText = factoryResult.errorText;
0027         return result;
0028     }
0029     KPluginFactory *factory = factoryResult.plugin;
0030 
0031     factory->setMetaData(KPluginMetaData(metaData));
0032 
0033     const QVariantList pluginArgs = QVariantList(args) << metaData.rawData().value(QLatin1String("X-KDE-KCM-Args")).toArray().toVariantList();
0034     if (const auto kcm = factory->create<KQuickConfigModule>(parent, pluginArgs)) {
0035         const std::shared_ptr<QQmlEngine> engine =
0036             engineArg ? engineArg : (s_kcmutilsCreatedEngine.expired() ? std::make_shared<QQmlEngine>() : s_kcmutilsCreatedEngine.lock());
0037 
0038         if (!engineArg && s_kcmutilsCreatedEngine.expired()) {
0039             s_kcmutilsCreatedEngine = engine;
0040         }
0041         kcm->setInternalEngine(engine);
0042 
0043         result.plugin = kcm;
0044         qCDebug(KCMUTILS_LOG) << "loaded QML KCM" << metaData.fileName();
0045     } else {
0046         result.errorReason = KPluginFactory::INVALID_KPLUGINFACTORY_INSTANTIATION;
0047     }
0048 
0049     return result;
0050 }