File indexing completed on 2024-04-14 04:51:40

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 KDECONNECT_DAEMON_H
0008 #define KDECONNECT_DAEMON_H
0009 
0010 #include <QMap>
0011 #include <QObject>
0012 #include <QSet>
0013 
0014 #include "device.h"
0015 #include "kdeconnectcore_export.h"
0016 
0017 class NetworkPacket;
0018 class DeviceLink;
0019 class Device;
0020 class QNetworkAccessManager;
0021 class KJobTrackerInterface;
0022 
0023 class KDECONNECTCORE_EXPORT Daemon : public QObject
0024 {
0025     Q_OBJECT
0026     Q_CLASSINFO("D-Bus Interface", "org.kde.kdeconnect.daemon")
0027     Q_PROPERTY(QStringList pairingRequests READ pairingRequests NOTIFY pairingRequestsChanged)
0028     Q_PROPERTY(QStringList customDevices READ customDevices WRITE setCustomDevices NOTIFY customDevicesChanged)
0029 
0030 public:
0031     explicit Daemon(QObject *parent, bool testMode = false);
0032     ~Daemon() override;
0033 
0034     static Daemon *instance();
0035 
0036     QList<Device *> devicesList() const;
0037 
0038     virtual void askPairingConfirmation(Device *device) = 0;
0039     virtual void reportError(const QString &title, const QString &description) = 0;
0040     virtual void quit() = 0;
0041     QNetworkAccessManager *networkAccessManager();
0042     virtual KJobTrackerInterface *jobTracker() = 0;
0043 
0044     Device *getDevice(const QString &deviceId);
0045 
0046     QSet<LinkProvider *> getLinkProviders() const;
0047 
0048     QStringList pairingRequests() const;
0049 
0050     // Custom devices
0051     QStringList customDevices() const;
0052     void setCustomDevices(const QStringList &addresses);
0053 
0054     Q_SCRIPTABLE QString selfId() const;
0055 public Q_SLOTS:
0056     Q_SCRIPTABLE void forceOnNetworkChange();
0057 
0058     /// don't try to turn into Q_PROPERTY, it doesn't work
0059     Q_SCRIPTABLE QString announcedName();
0060     Q_SCRIPTABLE void setAnnouncedName(const QString &name);
0061 
0062     // Returns a list of ids. The respective devices can be manipulated using the dbus path: "/modules/kdeconnect/Devices/"+id
0063     Q_SCRIPTABLE QStringList devices(bool onlyReachable = false, bool onlyPaired = false) const;
0064 
0065     Q_SCRIPTABLE QMap<QString, QString> deviceNames(bool onlyReachable = false, bool onlyPaired = false) const;
0066 
0067     Q_SCRIPTABLE QString deviceIdByName(const QString &name) const;
0068 
0069     Q_SCRIPTABLE virtual void sendSimpleNotification(const QString &eventId, const QString &title, const QString &text, const QString &iconName) = 0;
0070 
0071 Q_SIGNALS:
0072     Q_SCRIPTABLE void deviceAdded(const QString &id);
0073     Q_SCRIPTABLE void deviceRemoved(const QString &id); // Note that paired devices will never be removed
0074     Q_SCRIPTABLE void deviceVisibilityChanged(const QString &id, bool isVisible);
0075     Q_SCRIPTABLE void deviceListChanged(); // Emitted when any of deviceAdded, deviceRemoved or deviceVisibilityChanged is emitted
0076     Q_SCRIPTABLE void announcedNameChanged(const QString &announcedName);
0077     Q_SCRIPTABLE void pairingRequestsChanged();
0078     Q_SCRIPTABLE void customDevicesChanged(const QStringList &customDevices);
0079 
0080 private Q_SLOTS:
0081     void onNewDeviceLink(DeviceLink *dl);
0082     void onDeviceStatusChanged();
0083 
0084 private:
0085     void init();
0086 
0087 protected:
0088     void addDevice(Device *device);
0089     void removeDevice(Device *d);
0090 
0091     const std::unique_ptr<struct DaemonPrivate> d;
0092 };
0093 
0094 #endif