File indexing completed on 2024-05-12 17:00:16

0001 /*
0002  * SPDX-FileCopyrightText: 2020 Arjen Hiemstra <ahiemstra@heimr.nl>
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 <memory>
0010 #include <QHash>
0011 
0012 #include "NetworkBackend.h"
0013 #include "NetworkDevice.h"
0014 
0015 class QTimer;
0016 
0017 namespace NetworkManager
0018 {
0019     class Device;
0020     class DeviceStatistics;
0021     class WirelessDevice;
0022 }
0023 
0024 class NetworkManagerDevice : public NetworkDevice
0025 {
0026     Q_OBJECT
0027 
0028 public:
0029     NetworkManagerDevice(const QString &id, QSharedPointer<NetworkManager::Device> device);
0030     ~NetworkManagerDevice() override;
0031 
0032     void update();
0033 
0034     bool isConnected() const;
0035 
0036     Q_SIGNAL void connected(NetworkManagerDevice *device);
0037     Q_SIGNAL void disconnected(NetworkManagerDevice *device);
0038 
0039 private:
0040     void updateWifi();
0041 
0042     QSharedPointer<NetworkManager::Device> m_device;
0043     QSharedPointer<NetworkManager::DeviceStatistics> m_statistics;
0044     NetworkManager::WirelessDevice *m_wifiDevice = nullptr;
0045     std::unique_ptr<QTimer> m_statisticsTimer;
0046     bool m_connected = false;
0047     bool m_restoreTimer = false;
0048     uint m_initialStatisticsRate;
0049 };
0050 
0051 class NetworkManagerBackend : public NetworkBackend
0052 {
0053     Q_OBJECT
0054 
0055 public:
0056     NetworkManagerBackend(QObject *parent = nullptr);
0057     ~NetworkManagerBackend() override;
0058 
0059     bool isSupported() override;
0060     void start() override;
0061     void stop() override;
0062 
0063 private:
0064     void onDeviceAdded(const QString &uni);
0065     void onDeviceRemoved(const QString &uni);
0066 
0067     QHash<QString, NetworkManagerDevice *> m_devices;
0068 };
0069