raylib networking: reduce DBus calls (#36065)

* this reduces getsettings calls from n*n to n

* these are combined now

* same check
pull/36067/head
Shane Smiskol 6 days ago committed by GitHub
parent 23b4aaf2a5
commit 8059106cae
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 23
      system/ui/lib/wifi_manager.py

@ -264,12 +264,12 @@ class WifiManager:
return self._wifi_device
def _get_connections(self) -> list[str]:
def _get_connections(self) -> dict[str, str]:
settings_addr = DBusAddress(NM_SETTINGS_PATH, bus_name=NM, interface=NM_SETTINGS_IFACE)
return list(self._router_main.send_and_get_reply(new_method_call(settings_addr, 'ListConnections')).body[0])
known_connections = self._router_main.send_and_get_reply(new_method_call(settings_addr, 'ListConnections')).body[0]
def _connection_by_ssid(self, ssid: str, known_connections: list[str] | None = None) -> str | None:
for conn_path in known_connections or self._get_connections():
conns: dict[str, str] = {}
for conn_path in known_connections:
conn_addr = DBusAddress(conn_path, bus_name=NM, interface=NM_CONNECTION_IFACE)
reply = self._router_main.send_and_get_reply(new_method_call(conn_addr, "GetSettings"))
@ -279,9 +279,11 @@ class WifiManager:
continue
settings = reply.body[0]
if "802-11-wireless" in settings and settings['802-11-wireless']['ssid'][1].decode("utf-8", "replace") == ssid:
return conn_path
return None
if "802-11-wireless" in settings:
ssid = settings['802-11-wireless']['ssid'][1].decode("utf-8", "replace")
if ssid != "":
conns[ssid] = conn_path
return conns
def connect_to_network(self, ssid: str, password: str):
def worker():
@ -325,7 +327,7 @@ class WifiManager:
def forget_connection(self, ssid: str, block: bool = False):
def worker():
conn_path = self._connection_by_ssid(ssid)
conn_path = self._get_connections().get(ssid, None)
if conn_path is not None:
conn_addr = DBusAddress(conn_path, bus_name=NM, interface=NM_CONNECTION_IFACE)
self._router_main.send_and_get_reply(new_method_call(conn_addr, 'Delete'))
@ -341,7 +343,7 @@ class WifiManager:
def activate_connection(self, ssid: str, block: bool = False):
def worker():
conn_path = self._connection_by_ssid(ssid)
conn_path = self._get_connections().get(ssid, None)
if conn_path is not None:
if self._wifi_device is None:
cloudlog.warning("No WiFi device found")
@ -402,8 +404,7 @@ class WifiManager:
cloudlog.exception(f"Failed to parse AP properties for {ap_path}")
known_connections = self._get_connections()
networks = [Network.from_dbus(ssid, ap_list, self._connection_by_ssid(ssid, known_connections) is not None)
for ssid, ap_list in aps.items()]
networks = [Network.from_dbus(ssid, ap_list, ssid in known_connections) for ssid, ap_list in aps.items()]
networks.sort(key=lambda n: (-n.is_connected, -n.strength, n.ssid.lower()))
self._networks = networks

Loading…
Cancel
Save