File indexing completed on 2024-05-12 07:47:31
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 }