Skip to content

Commit bdaaa5f

Browse files
committed
feat: state, working subdevices
1 parent 87787dc commit bdaaa5f

15 files changed

+409
-219
lines changed

src/network/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ qt_add_dbus_interface(NM_DBUS_INTERFACES
3131

3232
qt_add_library(quickshell-network STATIC
3333
api.cpp
34-
nm/backend.cpp
35-
nm/adapters.cpp
34+
nm_backend.cpp
35+
nm_adapters.cpp
3636
${NM_DBUS_INTERFACES}
3737
)
3838

src/network/api.cpp

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include <qdbusservicewatcher.h>
99
#include <qlogging.h>
1010

11-
#include "nm/backend.hpp"
11+
#include "nm_backend.hpp"
1212

1313
namespace qs::network {
1414

@@ -17,6 +17,18 @@ Q_LOGGING_CATEGORY(logNetwork, "quickshell.network", QtWarningMsg);
1717
}
1818

1919
Device::Device(QObject* parent): QObject(parent) {};
20+
WirelessDevice::WirelessDevice(QObject* parent): Device(parent) {};
21+
22+
QString DeviceState::toString(DeviceState::Enum state) {
23+
switch (state) {
24+
case DeviceState::Unknown: return QStringLiteral("Unknown");
25+
case DeviceState::Disconnected: return QStringLiteral("Disconnected");
26+
case DeviceState::Connecting: return QStringLiteral("Connecting");
27+
case DeviceState::Connected: return QStringLiteral("Connected");
28+
case DeviceState::Disconnecting: return QStringLiteral("Disconnecting");
29+
default: return QStringLiteral("Unknown");
30+
}
31+
}
2032

2133
void Device::setName(const QString& name) {
2234
if (name != this->bName) {
@@ -30,12 +42,18 @@ void Device::setAddress(const QString& address) {
3042
}
3143
}
3244

33-
void WirelessDevice::setState(WirelessState::Enum state) {
45+
void Device::setState(DeviceState::Enum state) {
3446
if (state != this->bState) {
3547
this->bState = state;
3648
}
3749
}
3850

51+
void WirelessDevice::setLastScan(qint64 lastScan) {
52+
if (lastScan != this->bLastScan) {
53+
this->bLastScan = lastScan;
54+
}
55+
}
56+
3957
Network::Network(QObject* parent): QObject(parent) {
4058
// Try each backend
4159

src/network/api.hpp

Lines changed: 38 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,23 @@ namespace qs::network {
1616

1717
// -- Device --
1818

19+
class DeviceState: public QObject {
20+
Q_OBJECT;
21+
QML_ELEMENT;
22+
QML_SINGLETON;
23+
24+
public:
25+
enum Enum : quint8 {
26+
Unknown = 0,
27+
Disconnected = 10,
28+
Connecting = 20,
29+
Connected = 30,
30+
Disconnecting = 40,
31+
};
32+
Q_ENUM(Enum);
33+
Q_INVOKABLE static QString toString(DeviceState::Enum state);
34+
};
35+
1936
class Device: public QObject {
2037
Q_OBJECT;
2138
QML_ELEMENT;
@@ -24,79 +41,57 @@ class Device: public QObject {
2441
// clang-format off
2542
Q_PROPERTY(QString name READ default NOTIFY nameChanged BINDABLE bindableName);
2643
Q_PROPERTY(QString address READ default NOTIFY addressChanged BINDABLE bindableAddress);
44+
Q_PROPERTY(DeviceState::Enum state READ default NOTIFY stateChanged BINDABLE bindableState);
2745
// clang-format on
2846

2947
signals:
3048
void nameChanged();
3149
void addressChanged();
50+
void stateChanged();
3251

3352
public slots:
3453
void setName(const QString& name);
3554
void setAddress(const QString& address);
55+
void setState(DeviceState::Enum state);
3656

3757
public:
3858
explicit Device(QObject* parent = nullptr);
3959
[[nodiscard]] QBindable<QString> bindableName() const { return &this->bName; };
4060
[[nodiscard]] QBindable<QString> bindableAddress() const { return &this->bAddress; };
61+
[[nodiscard]] QBindable<DeviceState::Enum> bindableState() const { return &this->bState; };
4162

4263
private:
4364
Q_OBJECT_BINDABLE_PROPERTY(Device, QString, bName, &Device::nameChanged);
4465
Q_OBJECT_BINDABLE_PROPERTY(Device, QString, bAddress, &Device::addressChanged);
66+
Q_OBJECT_BINDABLE_PROPERTY(Device, DeviceState::Enum, bState, &Device::stateChanged);
4567
};
4668

4769
// -- Wireless Device --
48-
49-
class WirelessState: public QObject {
50-
Q_OBJECT;
51-
QML_ELEMENT;
52-
QML_SINGLETON;
53-
54-
public:
55-
enum Enum : quint8 {
56-
Unknown = 0,
57-
Disconnected = 10,
58-
Connecting = 20,
59-
Connected = 30,
60-
Disconnecting = 40,
61-
};
62-
Q_ENUM(Enum);
63-
};
64-
6570
class WirelessDevice: public Device {
6671
Q_OBJECT;
6772

6873
// clang-format off
69-
Q_PROPERTY(bool powered READ powered WRITE setPowered NOTIFY poweredChanged);
70-
Q_PROPERTY(WirelessState::Enum state READ default NOTIFY stateChanged BINDABLE bindableState);
74+
Q_PROPERTY(qint64 lastScan READ default NOTIFY lastScanChanged BINDABLE bindableLastScan);
7175
//clang-format on
7276

7377
signals:
74-
void poweredChanged();
75-
void stateChanged();
78+
void lastScanChanged();
7679

77-
private slots:
78-
void setState(WirelessState::Enum state);
80+
public slots:
81+
void setLastScan(qint64 lastScan);
7982

8083
public:
8184
explicit WirelessDevice(QObject* parent = nullptr);
8285

83-
Q_INVOKABLE virtual void disconnect() = 0;
84-
Q_INVOKABLE virtual void scan() = 0;
86+
// Q_INVOKABLE void disconnect();
87+
// Q_INVOKABLE void scan();
8588

86-
[[nodiscard]] bool powered() const { return this->bPowered; };
87-
virtual void setPowered(bool powered) = 0;
88-
89-
[[nodiscard]] QBindable<bool> bindablePowered() { return &this->bPowered; };
90-
[[nodiscard]] QBindable<WirelessState::Enum> bindableState() const { return &this->bState; };
89+
[[nodiscard]] QBindable<qint64> bindableLastScan() { return &this->bLastScan; };
9190

9291
private:
93-
Q_OBJECT_BINDABLE_PROPERTY(WirelessDevice, bool, bPowered, &WirelessDevice::poweredChanged);
94-
Q_OBJECT_BINDABLE_PROPERTY(
95-
WirelessDevice,
96-
WirelessState::Enum,
97-
bState,
98-
&WirelessDevice::stateChanged
99-
);
92+
// clang-format off
93+
Q_OBJECT_BINDABLE_PROPERTY(WirelessDevice, qint64, bLastScan, &WirelessDevice::lastScanChanged);
94+
// clang-format on
10095
};
10196

10297
// -- Network --
@@ -106,8 +101,8 @@ class NetworkBackend: public QObject {
106101

107102
public:
108103
[[nodiscard]] virtual bool isAvailable() const = 0;
109-
// virtual WirelessDevice* wifiDevice() = 0;
110104
virtual UntypedObjectModel* devices() = 0;
105+
virtual WirelessDevice* defaultWifiDevice() = 0;
111106

112107
protected:
113108
explicit NetworkBackend(QObject* parent = nullptr): QObject(parent) {};
@@ -118,13 +113,15 @@ class Network: public QObject {
118113
QML_NAMED_ELEMENT(Network);
119114
QML_SINGLETON;
120115

121-
// Q_PROPERTY(WirelessDevice* wifi READ wifiDevice CONSTANT);
116+
Q_PROPERTY(WirelessDevice* defaultWifiDevice READ defaultWifiDevice CONSTANT);
122117
Q_PROPERTY(UntypedObjectModel* devices READ devices CONSTANT);
123118

124119
public:
125120
explicit Network(QObject* parent = nullptr);
126-
// [[nodiscard]] WirelessDevice* wifi() { return backend ? backend->wifiDevice() : nullptr; }
127-
[[nodiscard]] UntypedObjectModel* devices() { return backend ? backend->devices() : nullptr; }
121+
[[nodiscard]] UntypedObjectModel* devices() { return backend ? backend->devices() : nullptr; };
122+
[[nodiscard]] WirelessDevice* defaultWifiDevice() {
123+
return backend ? backend->defaultWifiDevice() : nullptr;
124+
};
128125

129126
private:
130127
class NetworkBackend* backend = nullptr;

src/network/nm/adapters.cpp

Lines changed: 0 additions & 47 deletions
This file was deleted.

src/network/nm/adapters.hpp

Lines changed: 0 additions & 46 deletions
This file was deleted.

src/network/nm/org.freedesktop.NetworkManager.AccessPoint.xml

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/network/nm/org.freedesktop.NetworkManager.Device.Wireless.xml

Lines changed: 0 additions & 18 deletions
This file was deleted.

src/network/nm/org.freedesktop.NetworkManager.Device.xml

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/network/nm/org.freedesktop.NetworkManager.xml

Lines changed: 0 additions & 19 deletions
This file was deleted.

0 commit comments

Comments
 (0)