Skip to content

Commit 61f8c8f

Browse files
committed
feat: connected
1 parent 6429991 commit 61f8c8f

File tree

6 files changed

+208
-153
lines changed

6 files changed

+208
-153
lines changed

src/network/api.cpp

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ Q_LOGGING_CATEGORY(logNetworkDevice, "quickshell.network.device", QtWarningMsg);
1717
Q_LOGGING_CATEGORY(logNetwork, "quickshell.network", QtWarningMsg);
1818
} // namespace
1919

20-
// NetworkDevice
21-
2220
NetworkDevice::NetworkDevice(QObject* parent): QObject(parent) {};
2321

2422
QString NetworkDeviceState::toString(NetworkDeviceState::Enum state) {
@@ -36,7 +34,6 @@ QString NetworkDeviceType::toString(NetworkDeviceType::Enum type) {
3634
switch (type) {
3735
case NetworkDeviceType::Other: return QStringLiteral("Other");
3836
case NetworkDeviceType::Wireless: return QStringLiteral("Wireless");
39-
case NetworkDeviceType::Ethernet: return QStringLiteral("Ethernet");
4037
default: return QStringLiteral("Unknown");
4138
}
4239
}
@@ -75,8 +72,6 @@ void NetworkDevice::disconnect() {
7572
signalDisconnect();
7673
}
7774

78-
// WirelessNetworkDevice
79-
8075
NetworkWifiDevice::NetworkWifiDevice(QObject* parent): NetworkDevice(parent) {};
8176

8277
void NetworkWifiDevice::scanComplete(qint64 lastScan) {
@@ -100,31 +95,38 @@ void NetworkWifiDevice::scan() {
10095
signalScan();
10196
}
10297

103-
void NetworkWifiDevice::addNetwork(NetworkWifiNetwork* network) { mNetworks.insertObject(network); }
98+
void NetworkWifiDevice::addNetwork(WifiNetwork* network) { mNetworks.insertObjectSorted(network, &NetworkWifiDevice::compareNetworks); }
10499

105-
void NetworkWifiDevice::removeNetwork(NetworkWifiNetwork* network) {
106-
mNetworks.removeObject(network);
100+
bool NetworkWifiDevice::compareNetworks(WifiNetwork* a, WifiNetwork* b) {
101+
return a->bindableSignalStrength().value() > b->bindableSignalStrength().value();
107102
}
108103

109-
// NetworkAccessPoint
104+
void NetworkWifiDevice::removeNetwork(WifiNetwork* network) {
105+
mNetworks.removeObject(network);
106+
}
110107

111-
NetworkWifiNetwork::NetworkWifiNetwork(QObject* parent): QObject(parent) {};
108+
WifiNetwork::WifiNetwork(QObject* parent): QObject(parent) {};
112109

113-
void NetworkWifiNetwork::setSsid(const QString& ssid) {
110+
void WifiNetwork::setSsid(const QString& ssid) {
114111
if (this->bSsid != ssid) {
115112
this->bSsid = ssid;
116-
emit ssidChanged();
113+
emit this->ssidChanged();
117114
}
118115
}
119116

120-
void NetworkWifiNetwork::setSignal(quint8 signal) {
121-
if (this->bSignal != signal) {
122-
this->bSignal = signal;
123-
emit signalChanged();
117+
void WifiNetwork::setSignalStrength(quint8 signal) {
118+
if (this->bSignalStrength != signal) {
119+
this->bSignalStrength = signal;
120+
emit this->signalStrengthChanged();
124121
}
125122
}
126123

127-
// Network
124+
void WifiNetwork::setConnected(bool connected) {
125+
if (this->bConnected != connected) {
126+
this->bConnected = connected;
127+
emit this->connectedChanged();
128+
}
129+
}
128130

129131
Network::Network(QObject* parent): QObject(parent) {
130132
// Try each backend
@@ -136,10 +138,11 @@ Network::Network(QObject* parent): QObject(parent) {
136138
QObject::connect(nm, &NetworkManager::deviceRemoved, this, &Network::removeDevice);
137139
this->backend = nm;
138140
return;
141+
} else {
142+
delete nm;
139143
}
140144

141145
// None found
142-
this->backend = nullptr;
143146
qCCritical(logNetwork) << "Network will not work. Could not find an available backend.";
144147
}
145148

src/network/api.hpp

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,42 @@
1515
namespace qs::network {
1616

1717
///! A wifi network available to a wifi device
18-
class NetworkWifiNetwork: public QObject {
18+
class WifiNetwork: public QObject {
1919
Q_OBJECT;
2020
QML_ELEMENT;
21-
QML_UNCREATABLE("Wifi netorks can only be acquired through Network");
21+
QML_UNCREATABLE("Wifi networks can only be acquired through Network");
2222
// clang-format off
2323
/// The service set identifier of the wifi network
2424
Q_PROPERTY(QString ssid READ default NOTIFY ssidChanged BINDABLE bindableSsid);
25-
// The current signal quality of the best access point on the network, in percent.
26-
Q_PROPERTY(quint8 signal READ default NOTIFY signalChanged BINDABLE bindableSignal);
27-
//clang-format on
25+
// The current signal strength of the best access point on the network, in percent.
26+
Q_PROPERTY(quint8 signalStrength READ default NOTIFY signalStrengthChanged BINDABLE bindableSignalStrength);
27+
/// True if the wireless device is curerntly connected to this wifi network.
28+
Q_PROPERTY(bool connected READ default NOTIFY connectedChanged BINDABLE bindableConnected);
29+
// clang-format on
2830

2931
signals:
3032
void ssidChanged();
31-
void signalChanged();
33+
void signalStrengthChanged();
34+
void connectedChanged();
3235

3336
public slots:
3437
void setSsid(const QString& ssid);
35-
void setSignal(quint8 signal);
38+
void setSignalStrength(quint8 signalStrength);
39+
void setConnected(bool connected);
3640

3741
public:
38-
explicit NetworkWifiNetwork(QObject* parent = nullptr);
42+
explicit WifiNetwork(QObject* parent = nullptr);
3943

4044
[[nodiscard]] QBindable<QString> bindableSsid() const { return &this->bSsid; };
41-
[[nodiscard]] QBindable<quint8> bindableSignal() const { return &this->bSignal; };
45+
[[nodiscard]] QBindable<quint8> bindableSignalStrength() const { return &this->bSignalStrength; };
46+
[[nodiscard]] QBindable<bool> bindableConnected() const { return &this->bConnected; };
4247

4348
private:
44-
Q_OBJECT_BINDABLE_PROPERTY(NetworkWifiNetwork, QString, bSsid, &NetworkWifiNetwork::ssidChanged);
45-
Q_OBJECT_BINDABLE_PROPERTY(NetworkWifiNetwork, quint8, bSignal, &NetworkWifiNetwork::signalChanged);
49+
// clang-format off
50+
Q_OBJECT_BINDABLE_PROPERTY(WifiNetwork, QString, bSsid, &WifiNetwork::ssidChanged);
51+
Q_OBJECT_BINDABLE_PROPERTY(WifiNetwork, quint8, bSignalStrength, &WifiNetwork::signalStrengthChanged);
52+
Q_OBJECT_BINDABLE_PROPERTY(WifiNetwork, bool, bConnected, &WifiNetwork::connectedChanged);
53+
// clang-format on
4654
};
4755

4856
///! Type of network device.
@@ -57,8 +65,6 @@ class NetworkDeviceType: public QObject {
5765
Other = 0,
5866
///! An 802.11 Wi-Fi device.
5967
Wireless = 1,
60-
///! A wired ethernet device.
61-
Ethernet = 2
6268
};
6369
Q_ENUM(Enum);
6470
Q_INVOKABLE static QString toString(NetworkDeviceType::Enum type);
@@ -91,7 +97,7 @@ class NetworkDeviceState: public QObject {
9197
class NetworkDevice: public QObject {
9298
Q_OBJECT;
9399
QML_ELEMENT;
94-
QML_UNCREATABLE("NetworkDevices can only be acquired through Network");
100+
QML_UNCREATABLE("Devices can only be acquired through Network");
95101

96102
// clang-format off
97103
/// The name of the device's interface.
@@ -128,14 +134,11 @@ public slots:
128134
[[nodiscard]] QBindable<NetworkDeviceState::Enum> bindableState() const { return &this->bState; };
129135

130136
private:
137+
// clang-format off
131138
Q_OBJECT_BINDABLE_PROPERTY(NetworkDevice, QString, bName, &NetworkDevice::nameChanged);
132139
Q_OBJECT_BINDABLE_PROPERTY(NetworkDevice, QString, bAddress, &NetworkDevice::addressChanged);
133-
Q_OBJECT_BINDABLE_PROPERTY(
134-
NetworkDevice,
135-
NetworkDeviceState::Enum,
136-
bState,
137-
&NetworkDevice::stateChanged
138-
);
140+
Q_OBJECT_BINDABLE_PROPERTY(NetworkDevice, NetworkDeviceState::Enum, bState, &NetworkDevice::stateChanged);
141+
// clang-format on
139142
};
140143

141144
///! Wireless variant of a tracked network device.
@@ -145,11 +148,13 @@ class NetworkWifiDevice: public NetworkDevice {
145148
// clang-format off
146149
/// The timestamp (in CLOCK_BOOTTIME milliseconds) for the last finished network scan.
147150
Q_PROPERTY(qint64 lastScan READ default NOTIFY lastScanChanged BINDABLE bindableLastScan);
148-
/// True if the wireless device is currently scanning for available wifi networks.
151+
/// True if the wifi device is currently scanning for available wifi networks.
149152
Q_PROPERTY(bool scanning READ default NOTIFY scanningChanged BINDABLE bindableScanning);
150-
/// A list of all available wifi networks
153+
/// The currently active wifi network
154+
// Q_PROPERTY(WifiNetwork activeNetwork READ networks CONSTANT);
155+
/// A list of all wifi networks available to this wifi device
151156
Q_PROPERTY(UntypedObjectModel* networks READ networks CONSTANT);
152-
QSDOC_TYPE_OVERRIDE(ObjectModel<NetworkWifiNetwork>*)
157+
QSDOC_TYPE_OVERRIDE(ObjectModel<WifiNetwork>*)
153158
//clang-format on
154159

155160
signals:
@@ -160,8 +165,8 @@ class NetworkWifiDevice: public NetworkDevice {
160165

161166
public slots:
162167
void scanComplete(qint64 lastScan);
163-
void addNetwork(NetworkWifiNetwork* network);
164-
void removeNetwork(NetworkWifiNetwork* network);
168+
void addNetwork(WifiNetwork* network);
169+
void removeNetwork(WifiNetwork* network);
165170

166171
public:
167172
explicit NetworkWifiDevice(QObject* parent = nullptr);
@@ -176,12 +181,13 @@ public slots:
176181
UntypedObjectModel* networks() { return &this->mNetworks; };
177182

178183
private:
179-
ObjectModel<NetworkWifiNetwork> mNetworks {this};
184+
static bool compareNetworks(WifiNetwork* a, WifiNetwork* b);
185+
ObjectModel<WifiNetwork> mNetworks {this};
186+
180187
Q_OBJECT_BINDABLE_PROPERTY(NetworkWifiDevice, bool, bScanning, &NetworkWifiDevice::scanningChanged);
181188
Q_OBJECT_BINDABLE_PROPERTY(NetworkWifiDevice, qint64, bLastScan, &NetworkWifiDevice::lastScanChanged);
182189
};
183190

184-
// -- Network --
185191
class NetworkBackend: public QObject {
186192
Q_OBJECT;
187193

0 commit comments

Comments
 (0)