File indexing completed on 2024-05-19 05:37:58
0001 /* 0002 SPDX-FileCopyrightText: 2022 Kai Uwe Broulik <kde@broulik.de> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #pragma once 0008 0009 #include <QHash> 0010 #include <QList> 0011 #include <QSocketNotifier> 0012 #include <QString> 0013 0014 #include <KDEDModule> 0015 0016 #include <libudev.h> 0017 0018 class UdevDevice 0019 { 0020 public: 0021 explicit UdevDevice(struct udev_device *device); 0022 ~UdevDevice(); 0023 UdevDevice &operator=(const UdevDevice &other); 0024 0025 static UdevDevice fromDevice(struct udev_device *device); 0026 0027 udev_device *handle() const; 0028 0029 QString action() const; 0030 QString name() const; 0031 QString sysfsPath() const; 0032 QString subsystem() const; 0033 QString type() const; 0034 0035 QString deviceProperty(const char *name) const; 0036 QString sysfsProperty(const char *name) const; 0037 0038 QString model() const; 0039 QString vendor() const; 0040 QString displayName() const; 0041 0042 bool isRemovable() const; 0043 0044 private: 0045 UdevDevice(struct udev_device *device, bool ref); 0046 0047 QString getDeviceString(const char *(*getter)(struct udev_device *)) const; 0048 0049 struct udev_device *m_device = nullptr; 0050 }; 0051 0052 class Udev : public QObject 0053 { 0054 Q_OBJECT 0055 0056 public: 0057 Udev(QObject *parent = nullptr); 0058 ~Udev() override; 0059 0060 Q_SIGNALS: 0061 void deviceAdded(const UdevDevice &device); 0062 void deviceRemoved(const UdevDevice &device); 0063 0064 private: 0065 void onSocketActivated(); 0066 0067 struct udev *m_udev = nullptr; 0068 struct udev_monitor *m_monitor = nullptr; 0069 QSocketNotifier *m_notifier = nullptr; 0070 }; 0071 0072 class KdedDeviceNotifications : public KDEDModule 0073 { 0074 Q_OBJECT 0075 0076 public: 0077 KdedDeviceNotifications(QObject *parent, const QVariantList &args); 0078 ~KdedDeviceNotifications() override; 0079 0080 private: 0081 void onDeviceAdded(const UdevDevice &device); 0082 void onDeviceRemoved(const UdevDevice &device); 0083 0084 Udev m_udev; 0085 QHash<QString, QString> m_displayNames; 0086 QList<QString> m_removableDevices; 0087 };