Skip to content

Commit b12ad1b

Browse files
committed
refactor: active AP is handled by NMWirelessNetwork
1 parent 6282af4 commit b12ad1b

File tree

4 files changed

+17
-24
lines changed

4 files changed

+17
-24
lines changed

src/network/nm/accesspoint.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ class NMAccessPoint: public QObject {
5959
[[nodiscard]] NM80211ApSecurityFlags::Enum rsnFlags() const { return this->bRsnFlags; };
6060
[[nodiscard]] NM80211Mode::Enum mode() const { return this->bMode; };
6161
[[nodiscard]] NMWirelessSecurityType::Enum security() const { return this->bSecurity; };
62-
[[nodiscard]] bool active() const { return this->mActive; };
63-
void setActive(bool active) { this->mActive = active; };
6462

6563
signals:
6664
void ssidChanged(const QByteArray& ssid);

src/network/nm/backend.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ const QString NM_SERVICE = "org.freedesktop.NetworkManager";
2727
const QString NM_PATH = "/org/freedesktop/NetworkManager";
2828

2929
NetworkManager::NetworkManager(QObject* parent): NetworkBackend(parent) {
30+
qDBusRegisterMetaType<ConnectionSettingsMap>();
31+
3032
auto bus = QDBusConnection::systemBus();
3133
if (!bus.isConnected()) {
3234
qCWarning(logNetworkManager

src/network/nm/wireless.cpp

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ void NMWirelessNetwork::updateReferenceConnection() {
6262
}
6363
}
6464

65+
void NMWirelessNetwork::setActiveApPath(const QDBusObjectPath& path) {
66+
if (this->mActiveApPath == path) return;
67+
this->mActiveApPath = path;
68+
}
69+
6570
void NMWirelessNetwork::setState(NMConnectionState::Enum state) {
6671
if (this->mState == state) return;
6772
this->mState = state;
@@ -85,15 +90,11 @@ void NMWirelessNetwork::updateSignalStrength() {
8590
NMAccessPoint* selectedAp = nullptr;
8691

8792
for (auto* ap: this->mAccessPoints.values()) {
88-
if (ap->active()) {
89-
selectedStrength = ap->signalStrength();
90-
selectedAp = ap;
91-
break;
92-
}
9393
if (selectedStrength <= ap->signalStrength()) {
9494
selectedStrength = ap->signalStrength();
9595
selectedAp = ap;
9696
}
97+
if (ap->path() == this->mActiveApPath.path()) break;
9798
}
9899

99100
if (selectedStrength != this->mSignalStrength) {
@@ -217,22 +218,10 @@ void NMWirelessDevice::initWireless() {
217218
QObject::connect(this, &NMWirelessDevice::accessPointLoaded, this, &NMWirelessDevice::onAccessPointLoaded);
218219
QObject::connect(this, &NMWirelessDevice::connectionLoaded, this, &NMWirelessDevice::onConnectionLoaded);
219220
QObject::connect(this, &NMWirelessDevice::activeConnectionLoaded, this, &NMWirelessDevice::onActiveConnectionLoaded);
220-
QObject::connect(this, &NMWirelessDevice::activeAccessPointChanged, this, &NMWirelessDevice::onActiveAccessPointChanged);
221221
// clang-format on
222222
this->registerAccessPoints();
223223
}
224224

225-
void NMWirelessDevice::onActiveAccessPointChanged(const QDBusObjectPath& path) {
226-
// Make previous AP inactive
227-
auto* prevAp = this->mAccessPoints.value(this->mActiveApPath);
228-
if (prevAp) prevAp->setActive(false);
229-
230-
// Make current AP active
231-
this->mActiveApPath = path.path();
232-
auto* curAp = this->mAccessPoints.value(path.path());
233-
if (curAp) curAp->setActive(true);
234-
}
235-
236225
void NMWirelessDevice::onAccessPointPathAdded(const QDBusObjectPath& path) {
237226
this->registerAccessPoint(path.path());
238227
}
@@ -279,7 +268,6 @@ void NMWirelessDevice::registerAccessPoint(const QString& path) {
279268
}
280269

281270
auto* ap = new NMAccessPoint(path, this->capabilities(), this);
282-
if (ap->path() == this->mActiveApPath) ap->setActive(true);
283271

284272
if (!ap->isValid()) {
285273
qCWarning(logNetworkManager) << "Ignoring invalid registration of" << path;
@@ -298,9 +286,13 @@ void NMWirelessDevice::registerAccessPoint(const QString& path) {
298286
}
299287

300288
NMWirelessNetwork* NMWirelessDevice::registerNetwork(const QString& ssid) {
301-
auto* frontend = new WifiNetwork(ssid, this);
302289
auto* backend = new NMWirelessNetwork(ssid, this);
290+
// clang-format off
291+
backend->setActiveApPath(this->activeApPath());
292+
QObject::connect(this, &NMWirelessDevice::activeAccessPointChanged, backend, &NMWirelessNetwork::setActiveApPath);
293+
// clang-format on
303294

295+
auto* frontend = new WifiNetwork(ssid, this);
304296
// clang-format off
305297
frontend->setSignalStrength(backend->signalStrength());
306298
frontend->setState(static_cast<NetworkConnectionState::Enum>(backend->state()));

src/network/nm/wireless.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,11 @@ class NMWirelessNetwork: public QObject {
5656
[[nodiscard]] QList<NMConnectionSettings*> connections() const { return this->mConnections.values(); };
5757

5858
public slots:
59+
void setActiveApPath(const QDBusObjectPath& path);
5960
void setState(NMConnectionState::Enum state);
6061
void setReason(NMConnectionStateReason::Enum reason);
6162
void setKnown(bool known);
62-
63+
6364
signals:
6465
void signalStrengthChanged(quint8 signal);
6566
void stateChanged(NMConnectionState::Enum state);
@@ -73,6 +74,7 @@ public slots:
7374
QHash<QString, NMAccessPoint*> mAccessPoints;
7475
QHash<QString, NMConnectionSettings*> mConnections;
7576
NMActiveConnection* mActiveConnection = nullptr;
77+
QDBusObjectPath mActiveApPath;
7678
NMAccessPoint* mReferenceAp = nullptr;
7779
NMConnectionSettings* mReferenceConn = nullptr;
7880
NMConnectionState::Enum mState = NMConnectionState::Deactivated;
@@ -95,6 +97,7 @@ class NMWirelessDevice: public NMDevice {
9597
[[nodiscard]] bool isWirelessValid() const;
9698
[[nodiscard]] qint64 getLastScan() { return this->bLastScan; };
9799
[[nodiscard]] NMWirelessCapabilities::Enum capabilities() { return this->bCapabilities; };
100+
[[nodiscard]] const QDBusObjectPath& activeApPath() { return this->bActiveAccessPoint; };
98101

99102
public slots:
100103
void scan();
@@ -117,7 +120,6 @@ public slots:
117120
private slots:
118121
void onAccessPointPathAdded(const QDBusObjectPath& path);
119122
void onAccessPointPathRemoved(const QDBusObjectPath& path);
120-
void onActiveAccessPointChanged(const QDBusObjectPath& path);
121123
void onAccessPointLoaded(NMAccessPoint* ap);
122124
void onConnectionLoaded(NMConnectionSettings* conn);
123125
void onActiveConnectionLoaded(NMActiveConnection* active);
@@ -128,7 +130,6 @@ private slots:
128130
void initWireless();
129131
NMWirelessNetwork* registerNetwork(const QString& ssid);
130132

131-
QString mActiveApPath;
132133
QHash<QString, NMAccessPoint*> mAccessPoints;
133134
QHash<QString, NMWirelessNetwork*> mBackendNetworks;
134135

0 commit comments

Comments
 (0)