screen: move the wifi-manager to the network panel

moving the manager should increase startup times
only load it when the user wants to manage networks

network: add ip at the top (fixes #422)
network: always reload the list of networks
wifi: fix network list getting blank
network: make the list more resilient to netinfo errors
This commit is contained in:
alfrix
2022-03-19 22:02:21 -03:00
parent 0d259d6d04
commit 82c8d62876
3 changed files with 104 additions and 68 deletions

View File

@@ -12,9 +12,6 @@ import gi
gi.require_version("Gtk", "3.0")
from gi.repository import GLib, Gdk
RESCAN_INTERVAL = 180
KS_SOCKET_FILE = "/tmp/.KS_wpa_supplicant"
class WifiManager():
networks_in_supplicant = []
connected = False
@@ -45,6 +42,7 @@ class WifiManager():
self.timeout = None
self.scan_time = 0
KS_SOCKET_FILE = "/tmp/.KS_wpa_supplicant"
if os.path.exists(KS_SOCKET_FILE):
os.remove(KS_SOCKET_FILE)
@@ -63,7 +61,7 @@ class WifiManager():
self.wpa_cli("ATTACH", False)
self.wpa_cli("SCAN", False)
GLib.idle_add(self.read_wpa_supplicant)
self.timeout = GLib.timeout_add_seconds(RESCAN_INTERVAL, self.rescan)
self.timeout = GLib.timeout_add_seconds(180, self.rescan)
def add_callback(self, name, callback):
if name in self._callbacks and callback not in self._callbacks[name]:
@@ -145,14 +143,31 @@ class WifiManager():
return self.connected_ssid
def get_current_wifi(self, interface="wlan0"):
con_ssid = os.popen("sudo iwgetid -r").read().strip()
con_bssid = os.popen("sudo iwgetid -r -a").read().strip()
# wpa_cli status output is unstable use it as backup only
status = self.wpa_cli("STATUS").split('\n')
vars = {}
for line in status:
arr = line.split('=')
vars[arr[0]] = "=".join(arr[1:])
prev_ssid = self.connected_ssid
if "ssid" in vars and "bssid" in vars:
if con_ssid != "":
self.connected = True
self.connected_ssid = con_ssid
for ssid, val in self.networks.items():
if ssid == con_ssid:
self.networks[ssid]['connected'] = True
else:
self.networks[ssid]['connected'] = False
if prev_ssid != self.connected_ssid:
for cb in self._callbacks['connected']:
Gdk.threads_add_idle(
GLib.PRIORITY_DEFAULT_IDLE,
cb, self.connected_ssid, prev_ssid)
return [con_ssid, con_bssid]
elif "ssid" in vars and "bssid" in vars:
self.connected = True
self.connected_ssid = vars['ssid']
for ssid, val in self.networks.items():