File indexing completed on 2024-05-12 05:36:52
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 <KLocalizedString> 0008 #include <KPluginFactory> 0009 #include <KQuickConfigModule> 0010 0011 #include "device.h" 0012 #include "devicemodel.h" 0013 #include "enum.h" 0014 #include "manager.h" 0015 0016 #include <QDebug> 0017 0018 class QMLHelper : public QObject 0019 { 0020 Q_OBJECT 0021 public: 0022 explicit QMLHelper(QObject *parent = nullptr) 0023 : QObject(parent) 0024 { 0025 } 0026 0027 public Q_SLOTS: 0028 void authorizeDevice(Bolt::Device *device, Bolt::AuthFlags authFlags, QJSValue successCb = {}, QJSValue errorCb = {}) 0029 { 0030 device->authorize(authFlags, invoke(successCb), invoke<QString>(errorCb)); 0031 } 0032 0033 void 0034 enrollDevice(Bolt::Manager *manager, const QString &uid, Bolt::Policy policy, Bolt::AuthFlags authFlags, QJSValue successCb = {}, QJSValue errorCb = {}) 0035 { 0036 manager->enrollDevice(uid, policy, authFlags, invoke(successCb), invoke<QString>(errorCb)); 0037 } 0038 0039 void forgetDevice(Bolt::Manager *manager, const QString &uid, QJSValue successCb, QJSValue errorCb) 0040 { 0041 manager->forgetDevice(uid, invoke(successCb), invoke<QString>(errorCb)); 0042 } 0043 0044 private: 0045 template<typename... Args> 0046 std::function<void(Args...)> invoke(QJSValue cb_) 0047 { 0048 return [cb = std::move(cb_)](Args &&...args) mutable { 0049 Q_ASSERT(cb.isCallable()); 0050 cb.call({std::forward<Args>(args)...}); 0051 }; 0052 } 0053 }; 0054 0055 class KCMBolt : public KQuickConfigModule 0056 { 0057 Q_OBJECT 0058 0059 public: 0060 explicit KCMBolt(QObject *parent, const KPluginMetaData &metaData) 0061 : KQuickConfigModule(parent, metaData) 0062 { 0063 qmlRegisterType<Bolt::DeviceModel>("org.kde.bolt", 0, 1, "DeviceModel"); 0064 qmlRegisterType<Bolt::Manager>("org.kde.bolt", 0, 1, "Manager"); 0065 qmlRegisterUncreatableType<Bolt::Device>("org.kde.bolt", 0, 1, "Device", QStringLiteral("Use DeviceModel")); 0066 qmlRegisterUncreatableMetaObject(Bolt::staticMetaObject, "org.kde.bolt", 0, 1, "Bolt", QStringLiteral("For enums and flags only")); 0067 qmlRegisterSingletonType<QMLHelper>("org.kde.bolt", 0, 1, "QMLHelper", [](auto, auto) -> QObject * { 0068 return new QMLHelper(); 0069 }); 0070 } 0071 }; 0072 0073 K_PLUGIN_CLASS_WITH_JSON(KCMBolt, "kcm_bolt.json") 0074 0075 #include "kcm_bolt.moc"