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