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 #ifndef DEVICE_H_
0008 #define DEVICE_H_
0009 
0010 #include <QDBusObjectPath>
0011 #include <QDateTime>
0012 #include <QEnableSharedFromThis>
0013 #include <QObject>
0014 #include <QSharedPointer>
0015 #include <QString>
0016 
0017 #include <memory>
0018 
0019 #include "enum.h"
0020 #include "kbolt_export.h"
0021 
0022 class OrgFreedesktopBolt1DeviceInterface;
0023 namespace Bolt
0024 {
0025 class Manager;
0026 class KBOLT_EXPORT Device : public QObject, public QEnableSharedFromThis<Device>
0027 {
0028     Q_OBJECT
0029 
0030     Q_PROPERTY(QString uid READ uid CONSTANT)
0031     Q_PROPERTY(QString name READ name CONSTANT STORED false)
0032     Q_PROPERTY(QString vendor READ vendor CONSTANT STORED false)
0033     Q_PROPERTY(Bolt::Type type READ type CONSTANT STORED false)
0034     Q_PROPERTY(Bolt::Status status READ status NOTIFY statusChanged STORED false)
0035     Q_PROPERTY(Bolt::AuthFlags authFlags READ authFlags NOTIFY authFlagsChanged STORED false)
0036     Q_PROPERTY(QString parent READ parent CONSTANT STORED false)
0037     Q_PROPERTY(QString sysfsPath READ sysfsPath CONSTANT STORED false)
0038     Q_PROPERTY(QDateTime connectTime READ connectTime CONSTANT STORED false)
0039     Q_PROPERTY(QDateTime authorizeTime READ authorizeTime CONSTANT STORED false)
0040     Q_PROPERTY(bool stored READ stored NOTIFY storedChanged STORED false)
0041     Q_PROPERTY(Bolt::Policy policy READ policy NOTIFY policyChanged STORED false)
0042     Q_PROPERTY(Bolt::KeyState keyState READ keyState CONSTANT STORED false)
0043     Q_PROPERTY(QDateTime storeTime READ storeTime CONSTANT STORED false)
0044     Q_PROPERTY(QString label READ label CONSTANT STORED false)
0045 
0046     friend class Manager;
0047 
0048 public:
0049     static QSharedPointer<Device> create(const QDBusObjectPath &path);
0050     explicit Device(QObject *parent = nullptr);
0051     ~Device() override;
0052 
0053     QString uid() const;
0054     QString name() const;
0055     QString vendor() const;
0056     Type type() const;
0057     Status status() const;
0058     AuthFlags authFlags() const;
0059     QString parent() const;
0060     QString sysfsPath() const;
0061     QDateTime connectTime() const;
0062     QDateTime authorizeTime() const;
0063     bool stored() const;
0064     Policy policy() const;
0065     KeyState keyState() const;
0066     QDateTime storeTime() const;
0067     QString label() const;
0068 
0069     QDBusObjectPath dbusPath() const;
0070 
0071     void authorize(Bolt::AuthFlags authFlags, std::function<void()> successCb = {}, std::function<void(const QString &)> errorCb = {});
0072 
0073 Q_SIGNALS:
0074     void statusChanged(Bolt::Status);
0075     void storedChanged(bool stored);
0076     void policyChanged(Bolt::Policy policy);
0077     void authFlagsChanged(Bolt::AuthFlags authFlags);
0078 
0079 private:
0080     template<class T> template<class... Args> friend QSharedPointer<T> QSharedPointer<T>::create(Args &&...);
0081 
0082     Device(const QDBusObjectPath &path, QObject *parent = nullptr);
0083 
0084     void setStatusOverride(Status status);
0085     void clearStatusOverride();
0086 
0087     std::unique_ptr<OrgFreedesktopBolt1DeviceInterface> mInterface;
0088     QDBusObjectPath mDBusPath;
0089     QString mUid;
0090     Status mStatusOverride = Status::Unknown;
0091 };
0092 
0093 } // namespace
0094 
0095 #endif