From e02635993195f6cc72613a6d2e91fb27f608350b Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Mon, 25 Aug 2025 21:49:30 -0700 Subject: [PATCH] fix conn usage --- system/ui/lib/wifi_manager.py | 91 +++++++++++++++++------------------ 1 file changed, 45 insertions(+), 46 deletions(-) diff --git a/system/ui/lib/wifi_manager.py b/system/ui/lib/wifi_manager.py index c7fbd4d612..28bef76411 100644 --- a/system/ui/lib/wifi_manager.py +++ b/system/ui/lib/wifi_manager.py @@ -247,8 +247,6 @@ class WifiManager: def _monitor_state(self): device_path: str = self._wait_for_wifi_device() - conn = open_dbus_connection(bus="SYSTEM") - rule = MatchRule( type="signal", interface=NM_DEVICE_IFACE, @@ -257,50 +255,51 @@ class WifiManager: ) # Filter for StateChanged signal - conn.send_and_get_reply(message_bus.AddMatch(rule)) - - try: - with conn.filter(rule, queue=deque(maxlen=10)) as q: # TODO: not sure what to choose for this - while not self._exit: - # TODO: now that we have a nice poller we can run always? - # TODO: actually nah since it affects UI currently? or not? - if not self._active: - time.sleep(1) - continue - - # Block until a matching signal arrives - try: - msg = conn.recv_until_filtered(q, timeout=1) - except TimeoutError: - continue - - print('msg.body', msg.body) - new_state, previous_state, change_reason = msg.body - - print(f"------------ WiFi device state change: {new_state}, change reason: {change_reason}") - # BAD PASSWORD - if new_state == NMDeviceState.NEED_AUTH and change_reason == NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT and len(self._connecting_to_ssid): - print('------ NEED AUTH - SUPPLICANT DISCONNECT') - # TODO: this didn't show wrong password dialog but we were here - self.forget_connection(self._connecting_to_ssid, block=True) - if self._need_auth is not None: - self._need_auth(self._connecting_to_ssid) - self._connecting_to_ssid = "" - elif new_state == NMDeviceState.ACTIVATED: - print('------ ACTIVATED') - if self._activated is not None: - self._update_networks() - print('CALLING ACTIVATED CALLBACK1') - self._activated() - self._connecting_to_ssid = "" - elif new_state == NMDeviceState.DISCONNECTED and change_reason != NM_DEVICE_STATE_REASON_NEW_ACTIVATION: - print('------ DISCONNECTED') - self._connecting_to_ssid = "" - if self._disconnected is not None: - self._disconnected() - - finally: - conn.close() + self._conn_monitor.send_and_get_reply(message_bus.AddMatch(rule)) + + with self._conn_monitor.filter(rule, queue=deque(maxlen=10)) as q: # TODO: not sure what to choose for this + while not self._exit: + # TODO: now that we have a nice poller we can run always? + # TODO: actually nah since it affects UI currently? or not? + if not self._active: + time.sleep(1) + continue + + # Block until a matching signal arrives + try: + msg = self._conn_monitor.recv_until_filtered(q, timeout=1) + except TimeoutError: + continue + + print('msg.body', msg.body) + new_state, previous_state, change_reason = msg.body + + print(f"------------ WiFi device state change: {new_state}, change reason: {change_reason}") + # BAD PASSWORD + if new_state == NMDeviceState.NEED_AUTH and change_reason == NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT and len(self._connecting_to_ssid): + print('------ NEED AUTH - SUPPLICANT DISCONNECT') + # TODO: this didn't show wrong password dialog but we were here + print('forgetting connection to', self._connecting_to_ssid) + self.forget_connection(self._connecting_to_ssid, block=True) + print('forgot successful') + print('need auth is none?', self._need_auth is None) + if self._need_auth is not None: + print('CALLING NEED AUTH CALLBACK') + self._need_auth(self._connecting_to_ssid) + print('done calling') + self._connecting_to_ssid = "" + elif new_state == NMDeviceState.ACTIVATED: + print('------ ACTIVATED') + if self._activated is not None: + self._update_networks() + print('CALLING ACTIVATED CALLBACK1') + self._activated() + self._connecting_to_ssid = "" + elif new_state == NMDeviceState.DISCONNECTED and change_reason != NM_DEVICE_STATE_REASON_NEW_ACTIVATION: + print('------ DISCONNECTED') + self._connecting_to_ssid = "" + if self._disconnected is not None: + self._disconnected() def _network_scanner(self): self._wait_for_wifi_device()