File indexing completed on 2024-04-21 04:56:45
0001 /** 0002 * SPDX-FileCopyrightText: 2013 Albert Vaca <albertvaka@gmail.com> 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 <QHostAddress> 0011 #include <QObject> 0012 #include <QString> 0013 0014 #include "backends/devicelink.h" 0015 #include "deviceinfo.h" 0016 #include "networkpacket.h" 0017 #include "pairstate.h" 0018 0019 class DeviceLink; 0020 class KdeConnectPlugin; 0021 0022 class KDECONNECTCORE_EXPORT Device : public QObject 0023 { 0024 Q_OBJECT 0025 Q_CLASSINFO("D-Bus Interface", "org.kde.kdeconnect.device") 0026 Q_PROPERTY(QString type READ typeAsString NOTIFY typeChanged) 0027 Q_PROPERTY(QString name READ name NOTIFY nameChanged) 0028 Q_PROPERTY(QString iconName READ iconName CONSTANT) 0029 Q_PROPERTY(QString statusIconName READ statusIconName NOTIFY statusIconNameChanged) 0030 Q_PROPERTY(bool isReachable READ isReachable NOTIFY reachableChanged) 0031 Q_PROPERTY(bool isPaired READ isPaired NOTIFY pairStateChanged) 0032 Q_PROPERTY(bool isPairRequested READ isPairRequested NOTIFY pairStateChanged) 0033 Q_PROPERTY(bool isPairRequestedByPeer READ isPairRequestedByPeer NOTIFY pairStateChanged) 0034 Q_PROPERTY(int pairState READ pairStateAsInt NOTIFY pairStateChanged) 0035 Q_PROPERTY(QStringList supportedPlugins READ supportedPlugins NOTIFY pluginsChanged) 0036 0037 public: 0038 /** 0039 * Restores the @p device from the saved configuration 0040 * 0041 * We already know it but we need to wait for an incoming DeviceLink to communicate 0042 */ 0043 Device(QObject *parent, const QString &id); 0044 0045 /** 0046 * Device known via an incoming connection sent to us via a devicelink. 0047 * 0048 * We know everything but we don't trust it yet 0049 */ 0050 Device(QObject *parent, DeviceLink *link); 0051 0052 ~Device() override; 0053 0054 QString id() const; 0055 QString name() const; 0056 QString dbusPath() const 0057 { 0058 return QStringLiteral("/modules/kdeconnect/devices/") + id(); 0059 } 0060 DeviceType type() const; 0061 QString typeAsString() const 0062 { 0063 return type().toString(); 0064 }; 0065 QString iconName() const; 0066 QString statusIconName() const; 0067 Q_SCRIPTABLE QByteArray verificationKey() const; 0068 Q_SCRIPTABLE QString encryptionInfo() const; 0069 0070 // Add and remove links 0071 void addLink(DeviceLink *link); 0072 void removeLink(DeviceLink *link); 0073 0074 bool updateDeviceInfo(const DeviceInfo &deviceInfo); 0075 0076 PairState pairState() const; 0077 Q_SCRIPTABLE int pairStateAsInt() const; // Hack because qdbus doesn't like enums 0078 Q_SCRIPTABLE bool isPaired() const; 0079 Q_SCRIPTABLE bool isPairRequested() const; 0080 Q_SCRIPTABLE bool isPairRequestedByPeer() const; 0081 virtual bool isReachable() const; 0082 0083 Q_SCRIPTABLE QStringList loadedPlugins() const; 0084 Q_SCRIPTABLE bool hasPlugin(const QString &name) const; 0085 0086 Q_SCRIPTABLE QString pluginsConfigFile() const; 0087 0088 KdeConnectPlugin *plugin(const QString &pluginName) const; 0089 Q_SCRIPTABLE void setPluginEnabled(const QString &pluginName, bool enabled); 0090 Q_SCRIPTABLE bool isPluginEnabled(const QString &pluginName) const; 0091 0092 int protocolVersion(); 0093 QStringList supportedPlugins() const; 0094 0095 QHostAddress getLocalIpAddress() const; 0096 0097 public Q_SLOTS: 0098 /// sends a @p np packet to the device 0099 /// virtual for testing purposes. 0100 virtual bool sendPacket(NetworkPacket &np); 0101 0102 // Dbus operations 0103 public Q_SLOTS: 0104 Q_SCRIPTABLE void requestPairing(); 0105 Q_SCRIPTABLE void unpair(); 0106 Q_SCRIPTABLE void reloadPlugins(); // from kconf 0107 0108 Q_SCRIPTABLE void acceptPairing(); 0109 Q_SCRIPTABLE void cancelPairing(); 0110 0111 Q_SCRIPTABLE QString pluginIconName(const QString &pluginName); 0112 private Q_SLOTS: 0113 void privateReceivedPacket(const NetworkPacket &np); 0114 void linkDestroyed(QObject *o); 0115 0116 void pairingHandler_incomingPairRequest(); 0117 void pairingHandler_pairingFailed(const QString &errorMessage); 0118 void pairingHandler_pairingSuccessful(); 0119 void pairingHandler_unpaired(); 0120 0121 Q_SIGNALS: 0122 Q_SCRIPTABLE void pluginsChanged(); 0123 Q_SCRIPTABLE void reachableChanged(bool reachable); 0124 Q_SCRIPTABLE void pairStateChanged(int pairState); // Hack because qdbus doesn't like enums 0125 Q_SCRIPTABLE void pairingFailed(const QString &error); 0126 Q_SCRIPTABLE void nameChanged(const QString &name); 0127 Q_SCRIPTABLE void typeChanged(const QString &type); 0128 Q_SCRIPTABLE void statusIconNameChanged(); 0129 0130 private: // Methods 0131 QSslCertificate certificate() const; 0132 0133 private: 0134 class DevicePrivate; 0135 DevicePrivate *d; 0136 }; 0137 0138 Q_DECLARE_METATYPE(Device *) 0139 0140 #endif // DEVICE_H