File indexing completed on 2024-05-19 16:39:58
0001 /* 0002 * SPDX-FileCopyrightText: 2018-2019 Daniel Vrátil <dvratil@kde.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "kcm_bolt.h" 0008 0009 #include <KAboutData> 0010 #include <KLocalizedString> 0011 #include <KPluginFactory> 0012 0013 #include "device.h" 0014 #include "devicemodel.h" 0015 #include "enum.h" 0016 #include "manager.h" 0017 0018 #include <QDebug> 0019 0020 K_PLUGIN_FACTORY_WITH_JSON(KCMBoltFactory, "kcm_bolt.json", registerPlugin<KCMBolt>();) 0021 0022 class QMLHelper : public QObject 0023 { 0024 Q_OBJECT 0025 public: 0026 explicit QMLHelper(QObject *parent = nullptr) 0027 : QObject(parent) 0028 { 0029 } 0030 0031 public Q_SLOTS: 0032 void authorizeDevice(Bolt::Device *device, Bolt::AuthFlags authFlags, QJSValue successCb = {}, QJSValue errorCb = {}) 0033 { 0034 device->authorize(authFlags, invoke(successCb), invoke<QString>(errorCb)); 0035 } 0036 0037 void 0038 enrollDevice(Bolt::Manager *manager, const QString &uid, Bolt::Policy policy, Bolt::AuthFlags authFlags, QJSValue successCb = {}, QJSValue errorCb = {}) 0039 { 0040 manager->enrollDevice(uid, policy, authFlags, invoke(successCb), invoke<QString>(errorCb)); 0041 } 0042 0043 void forgetDevice(Bolt::Manager *manager, const QString &uid, QJSValue successCb, QJSValue errorCb) 0044 { 0045 manager->forgetDevice(uid, invoke(successCb), invoke<QString>(errorCb)); 0046 } 0047 0048 private: 0049 template<typename... Args> std::function<void(Args...)> invoke(QJSValue cb_) 0050 { 0051 return [cb = std::move(cb_)](Args &&... args) mutable { 0052 Q_ASSERT(cb.isCallable()); 0053 cb.call({std::forward<Args>(args)...}); 0054 }; 0055 } 0056 }; 0057 0058 KCMBolt::KCMBolt(QObject *parent, const QVariantList &args) 0059 : KQuickAddons::ConfigModule(parent, args) 0060 { 0061 qmlRegisterType<Bolt::DeviceModel>("org.kde.bolt", 0, 1, "DeviceModel"); 0062 qmlRegisterType<Bolt::Manager>("org.kde.bolt", 0, 1, "Manager"); 0063 qmlRegisterUncreatableType<Bolt::Device>("org.kde.bolt", 0, 1, "Device", QStringLiteral("Use DeviceModel")); 0064 qmlRegisterUncreatableMetaObject(Bolt::staticMetaObject, "org.kde.bolt", 0, 1, "Bolt", QStringLiteral("For enums and flags only")); 0065 qmlRegisterSingletonType<QMLHelper>("org.kde.bolt", 0, 1, "QMLHelper", [](auto, auto) -> QObject * { 0066 return new QMLHelper(); 0067 }); 0068 0069 auto about = std::make_unique<KAboutData>(QStringLiteral("kcm_bolt"), 0070 i18n("Thunderbolt Device Management"), 0071 QStringLiteral("0.1"), 0072 i18n("System Settings module for managing Thunderbolt devices."), 0073 KAboutLicense::GPL); 0074 about->addAuthor(i18n("Daniel Vrátil"), {}, QStringLiteral("dvratil@kde.org")); 0075 setAboutData(about.release()); 0076 } 0077 0078 #include "kcm_bolt.moc"