|
|
|
@ -136,10 +136,9 @@ class WifiManager: |
|
|
|
|
self._callback_queue: list[Callable] = [] |
|
|
|
|
|
|
|
|
|
# Callbacks |
|
|
|
|
# TODO: implement a callback queue to avoid blocking UI thread |
|
|
|
|
self._need_auth: Callable[[str], None] | None = None |
|
|
|
|
self._activated: Callable[[], None] | None = None |
|
|
|
|
self._forgotten: Callable[[str], None] | None = None |
|
|
|
|
self._forgotten: Callable[[], None] | None = None |
|
|
|
|
self._networks_updated: Callable[[list[Network]], None] | None = None |
|
|
|
|
self._disconnected: Callable[[], None] | None = None |
|
|
|
|
|
|
|
|
@ -155,7 +154,7 @@ class WifiManager: |
|
|
|
|
|
|
|
|
|
def set_callbacks(self, need_auth: Callable[[str], None], |
|
|
|
|
activated: Callable[[], None] | None, |
|
|
|
|
forgotten: Callable[[str], None], |
|
|
|
|
forgotten: Callable[[], None], |
|
|
|
|
networks_updated: Callable[[list[Network]], None], |
|
|
|
|
disconnected: Callable[[], None]): |
|
|
|
|
self._need_auth = need_auth |
|
|
|
@ -164,11 +163,14 @@ class WifiManager: |
|
|
|
|
self._networks_updated = networks_updated |
|
|
|
|
self._disconnected = disconnected |
|
|
|
|
|
|
|
|
|
def _enqueue_callback(self, cb: Callable, *args): |
|
|
|
|
self._callback_queue.append(lambda: cb(*args)) |
|
|
|
|
|
|
|
|
|
def process_callbacks(self): |
|
|
|
|
for cb in self._callback_queue: |
|
|
|
|
print('calling wifi cb', cb.__name__) |
|
|
|
|
# Call from UI thread to run any pending callbacks |
|
|
|
|
to_run, self._callback_queue = self._callback_queue, [] |
|
|
|
|
for cb in to_run: |
|
|
|
|
cb() |
|
|
|
|
self._callback_queue.clear() |
|
|
|
|
|
|
|
|
|
def set_active(self, active: bool): |
|
|
|
|
self._active = active |
|
|
|
@ -213,19 +215,20 @@ class WifiManager: |
|
|
|
|
print('hi') |
|
|
|
|
if self._need_auth is not None: |
|
|
|
|
print('wifi need auth', self._connecting_to_ssid) |
|
|
|
|
self._callback_queue.append(lambda ssid=self._connecting_to_ssid: self._need_auth(ssid)) |
|
|
|
|
# self._callback_queue.append(lambda cb=self._need_auth, ssid=self._connecting_to_ssid: cb(ssid)) |
|
|
|
|
self._enqueue_callback(self._need_auth, self._connecting_to_ssid) |
|
|
|
|
self._connecting_to_ssid = "" |
|
|
|
|
|
|
|
|
|
elif new_state == NMDeviceState.ACTIVATED: |
|
|
|
|
if self._activated is not None: |
|
|
|
|
self._update_networks() |
|
|
|
|
self._callback_queue.append(self._activated) |
|
|
|
|
self._enqueue_callback(self._activated) |
|
|
|
|
self._connecting_to_ssid = "" |
|
|
|
|
|
|
|
|
|
elif new_state == NMDeviceState.DISCONNECTED and change_reason != NM_DEVICE_STATE_REASON_NEW_ACTIVATION: |
|
|
|
|
self._connecting_to_ssid = "" |
|
|
|
|
if self._disconnected is not None: |
|
|
|
|
self._callback_queue.append(self._disconnected) |
|
|
|
|
self._enqueue_callback(self._disconnected) |
|
|
|
|
|
|
|
|
|
def _network_scanner(self): |
|
|
|
|
self._wait_for_wifi_device() |
|
|
|
@ -333,7 +336,7 @@ class WifiManager: |
|
|
|
|
|
|
|
|
|
if self._forgotten is not None: |
|
|
|
|
self._update_networks() |
|
|
|
|
self._callback_queue.append(lambda: self._forgotten(ssid)) |
|
|
|
|
self._enqueue_callback(self._forgotten) |
|
|
|
|
|
|
|
|
|
if block: |
|
|
|
|
worker() |
|
|
|
@ -409,7 +412,7 @@ class WifiManager: |
|
|
|
|
self._networks = networks |
|
|
|
|
|
|
|
|
|
if self._networks_updated is not None: |
|
|
|
|
self._callback_queue.append(lambda: self._networks_updated(self._networks)) |
|
|
|
|
self._enqueue_callback(self._networks_updated, self._networks) |
|
|
|
|
|
|
|
|
|
def __del__(self): |
|
|
|
|
self.stop() |
|
|
|
|