状态栏增加网络连接图标

This commit is contained in:
张开科 2025-02-28 16:27:57 +08:00
parent 9c99cd9125
commit 964a81c37c
2 changed files with 80 additions and 0 deletions

View File

@ -230,6 +230,10 @@ class SdbusNm:
else None
)
def get_signal_strength(self):
ap = self.get_connected_ap()
return ap.strength if ap else None
def get_security_type(self, ssid):
return next(
(

View File

@ -8,6 +8,7 @@ from gi.repository import GLib, Gtk, Pango
from jinja2 import Environment
from datetime import datetime
from math import log
from ks_includes.sdbus_nm import SdbusNm
from ks_includes.screen_panel import ScreenPanel
@ -18,11 +19,37 @@ class BasePanel(ScreenPanel):
self.time_min = -1
self.time_format = self._config.get_main_config().getboolean("24htime", True)
self.time_update = None
self.network_update = None
self.titlebar_items = []
self.titlebar_name_type = None
self.current_extruder = None
self.last_usage_report = datetime.now()
self.usage_report = 0
icon_size_width = self._gtk.content_width * 0.05
icon_size_height = self._gtk.content_height * 0.05
network_icons_map = {
"excellent": "wifi_excellent",
"good": "wifi_good",
"fair": "wifi_fair",
"weak": "wifi_weak",
"ethernet": "ethernet",
}
self.network_icons = {
key: self._gtk.PixbufFromIcon(value, width=icon_size_width, height=icon_size_height)
for key, value in network_icons_map.items()
}
try:
self.sdbus_nm = SdbusNm(self.network_interface_refresh)
except Exception as e:
logging.exception("Failed to initialize SdbusNm: %s", e)
self.sdbus_nm = None
# Action bar buttons
abscale = self.bts * 1.1
self.control['back'] = self._gtk.Button('back', scale=abscale)
@ -108,6 +135,18 @@ class BasePanel(ScreenPanel):
license_eventbox.connect("button-press-event", self.show_license_key_page)
self.control["license_box"] = Gtk.Box(halign=Gtk.Align.END)
self.control["license_box"].pack_end(license_eventbox, True, True, 5)
if self.sdbus_nm:
img_size = self._gtk.img_scale * self.bts
self.control["network_ico"] = self._gtk.Image("wifi_excellent", img_size, img_size)
network_eventbox = Gtk.EventBox()
network_eventbox.add(self.control["network_ico"])
network_eventbox.connect("button-press-event", self.show_network_page)
self.control["network_box"] = Gtk.Box(halign=Gtk.Align.END)
self.control["network_box"].pack_end(network_eventbox, True, True, 5)
self.control["network_ico"].set_no_show_all(True)
self.control["network_ico"].set_visible(False)
self.control['time'] = Gtk.Label(label="00:00 AM")
self.control['time_box'] = Gtk.Box(halign=Gtk.Align.END)
self.control['time_box'].pack_end(self.control['time'], True, True, 10)
@ -118,6 +157,8 @@ class BasePanel(ScreenPanel):
self.titlebar.add(self.titlelbl)
if self._screen.license.is_interface_valid() and not self._screen.license.is_active():
self.titlebar.add(self.control["license_box"])
if self.sdbus_nm:
self.titlebar.add(self.control["network_box"])
self.titlebar.add(self.control['time_box'])
self.set_title(title)
@ -141,6 +182,10 @@ class BasePanel(ScreenPanel):
if "license" not in self._screen._cur_panels:
self._screen.show_panel("license", remove_all=False)
def show_network_page(self, widget, event):
if "network" not in self._screen._cur_panels:
self._screen.show_panel("network", remove_all=False)
def reload_icons(self):
button: Gtk.Button
for button in self.action_bar.get_children():
@ -226,6 +271,8 @@ class BasePanel(ScreenPanel):
def activate(self):
if self.time_update is None:
self.time_update = GLib.timeout_add_seconds(1, self.update_time)
if self.sdbus_nm and self.network_update is None:
self.network_update = GLib.timeout_add_seconds(5, self.network_interface_refresh)
def add_content(self, panel):
printing = self._printer and self._printer.state in {"printing", "paused"}
@ -395,6 +442,35 @@ class BasePanel(ScreenPanel):
self.time_format = confopt
return True
def network_interface_refresh(self, msg=None, level=3):
if self.sdbus_nm:
self.interface = self.sdbus_nm.get_primary_interface()
if self.interface:
if '?' not in self.sdbus_nm.get_ip_address():
if self.interface == "eth0":
self.control["network_ico"].set_from_pixbuf(self.network_icons["ethernet"])
self.control["network_ico"].set_visible(True)
elif self.interface == "wlan0":
strength = self.sdbus_nm.get_signal_strength()
if strength:
self.control["network_ico"].set_from_pixbuf(self.get_signal_strength_icon(strength))
self.control["network_ico"].set_visible(True)
else:
self.control["network_ico"].set_visible(False)
else:
self.control["network_ico"].set_visible(False)
return True
def get_signal_strength_icon(self, signal_level):
if signal_level > 75:
return self.network_icons["excellent"]
elif signal_level > 60:
return self.network_icons["good"]
elif signal_level > 30:
return self.network_icons["fair"]
else:
return self.network_icons["weak"]
def set_ks_printer_cfg(self, printer):
ScreenPanel.ks_printer_cfg = self._config.get_printer_config(printer)
if self.ks_printer_cfg is not None: