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"