refactor: drive UI from service signals, drop redundant polling
- bluetooth.py / wifi.py: remove 5s periodic refresh timers; rely on service `changed`/`device-added`/`device-removed`/`notify` signals - expanded_player.py: remove 500ms metadata poll; rely on `meta-change`/`artwork-change` signals - player.py (notch): connect previously dangling `artwork-change` handler - popup_win.py: silence harmless "nothing connected" warning on destroy() No behaviour change; eliminates dead timers and log spam.
This commit is contained in:
5 files changed
+10
-86
No files matched your search
@@ -100,15 +100,17 @@ class PopupWindow(WaylandWindow):
|
||||
try:
|
||||
self._pointing_widget.disconnect_by_func(self.do_handle_size_allocate)
|
||||
except Exception as e:
|
||||
logger.warning(
|
||||
f"[popup_win] self._pointing_widget.disconnect_by_func(self.do_handle_s... failed: {e}"
|
||||
)
|
||||
if "nothing connected" not in str(e):
|
||||
logger.warning(
|
||||
f"[popup_win] self._pointing_widget.disconnect_by_func(self.do_handle_s... failed: {e}"
|
||||
)
|
||||
try:
|
||||
self.disconnect_by_func(self.do_handle_size_allocate)
|
||||
except Exception as e:
|
||||
logger.warning(
|
||||
f"[popup_win] self.disconnect_by_func(self.do_handle_size_allocate) failed: {e}"
|
||||
)
|
||||
if "nothing connected" not in str(e):
|
||||
logger.warning(
|
||||
f"[popup_win] self.disconnect_by_func(self.do_handle_size_allocate) failed: {e}"
|
||||
)
|
||||
super().destroy()
|
||||
|
||||
def do_calculate_edges(self):
|
||||
|
||||
@@ -338,7 +338,6 @@ class BluetoothConnections(Box):
|
||||
self.parent = parent
|
||||
self.show_hidden_devices = show_hidden_devices
|
||||
self.is_scanning = False # Track scanning state
|
||||
self.refresh_timer = None # Timer for periodic device refresh
|
||||
self._update_in_progress = False # Prevent concurrent updates
|
||||
self._destroyed = False # Track if widget is destroyed
|
||||
self._client_signal_ids = [] # Track BluetoothClient signal IDs
|
||||
@@ -470,7 +469,6 @@ class BluetoothConnections(Box):
|
||||
|
||||
self.connect("destroy", self.on_destroy)
|
||||
self.connect("unmap", self.on_hide)
|
||||
self.connect("map", lambda *_: self.start_device_monitoring())
|
||||
|
||||
self.client.notify("scanning")
|
||||
self.client.notify("enabled")
|
||||
@@ -489,7 +487,6 @@ class BluetoothConnections(Box):
|
||||
|
||||
def on_hide(self, *_):
|
||||
"""Called when the widget is hidden (popup closed)"""
|
||||
self.stop_device_monitoring()
|
||||
self._cancel_pending_refresh()
|
||||
if self.other_devices.get_visible():
|
||||
self.other_devices.set_visible(False)
|
||||
@@ -675,34 +672,6 @@ class BluetoothConnections(Box):
|
||||
finally:
|
||||
self._update_in_progress = False
|
||||
|
||||
def start_device_monitoring(self):
|
||||
"""Start periodic monitoring for device changes"""
|
||||
self.stop_device_monitoring()
|
||||
self.refresh_timer = GLib.timeout_add_seconds(5, self.periodic_device_refresh)
|
||||
|
||||
def stop_device_monitoring(self):
|
||||
"""Stop periodic monitoring"""
|
||||
if self.refresh_timer:
|
||||
GLib.source_remove(self.refresh_timer)
|
||||
self.refresh_timer = None
|
||||
|
||||
def periodic_device_refresh(self):
|
||||
"""Periodically refresh device list to catch external connections"""
|
||||
if self._destroyed:
|
||||
self.refresh_timer = None
|
||||
return False
|
||||
|
||||
# Skip if update in progress or client not available/enabled
|
||||
if self._update_in_progress or not self.client or not self.client.enabled:
|
||||
return True # Continue monitoring
|
||||
|
||||
try:
|
||||
self.update_devices()
|
||||
except Exception as e:
|
||||
logger.error(f"[Bluetooth] Error during periodic refresh: {e}")
|
||||
|
||||
return True
|
||||
|
||||
def force_device_refresh(self):
|
||||
"""Force an immediate refresh of the device list"""
|
||||
if self._update_in_progress or self._destroyed:
|
||||
@@ -724,7 +693,6 @@ class BluetoothConnections(Box):
|
||||
def on_destroy(self, widget):
|
||||
"""Cleanup when widget is destroyed"""
|
||||
self._destroyed = True
|
||||
self.stop_device_monitoring()
|
||||
self._cancel_pending_refresh()
|
||||
for sig_id in self._client_signal_ids:
|
||||
try:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import weakref
|
||||
|
||||
from fabric.utils import GLib, bulk_connect, logger
|
||||
from fabric.utils import bulk_connect, logger
|
||||
from fabric.widgets.box import Box
|
||||
from fabric.widgets.button import Button
|
||||
from fabric.widgets.image import Image
|
||||
@@ -286,7 +286,6 @@ class PlayerBox(Box):
|
||||
self._signal_connections = []
|
||||
self._property_bindings = []
|
||||
self._seekbar_signal_ids = []
|
||||
self._init_metadata_polled = False
|
||||
self._cached_duration = 0
|
||||
|
||||
self.album_cover = Box(style_classes="album-image-c")
|
||||
@@ -506,7 +505,6 @@ class PlayerBox(Box):
|
||||
self.cover_path = result
|
||||
|
||||
self._load_initial_metadata()
|
||||
GLib.timeout_add(500, self._poll_initial_metadata)
|
||||
|
||||
def _load_initial_metadata(self):
|
||||
try:
|
||||
@@ -533,16 +531,6 @@ class PlayerBox(Box):
|
||||
f"[expanded_player] metadata = self.player._player.props.metadata failed: {e}"
|
||||
)
|
||||
|
||||
def _poll_initial_metadata(self):
|
||||
if self.exit:
|
||||
return False
|
||||
if self._init_metadata_polled:
|
||||
return False
|
||||
self._init_metadata_polled = True
|
||||
self._load_initial_metadata()
|
||||
self.set_image()
|
||||
return False
|
||||
|
||||
def update_buttons(self, player_buttons, show_buttons):
|
||||
if show_buttons and len(player_buttons) > 1:
|
||||
if len(self.stack_buttons_box.get_children()) != len(player_buttons):
|
||||
|
||||
@@ -272,7 +272,6 @@ class WifiConnections(Box):
|
||||
self.network_service = NetworkClient()
|
||||
self.wifi_service = None
|
||||
self.is_scanning = False # Track scanning state
|
||||
self.refresh_timer = None # Timer for periodic network refresh
|
||||
self._update_in_progress = False # Prevent concurrent updates
|
||||
self._destroyed = False # Track if widget is destroyed
|
||||
self._signal_ids = [] # Track all service signal IDs for cleanup
|
||||
@@ -387,11 +386,9 @@ class WifiConnections(Box):
|
||||
|
||||
self.connect("destroy", self.on_destroy)
|
||||
self.connect("unmap", self.on_hide)
|
||||
self.connect("map", lambda *_: self.start_network_monitoring())
|
||||
|
||||
def on_hide(self, *_):
|
||||
"""Called when the widget is hidden (popup closed)"""
|
||||
self.stop_network_monitoring()
|
||||
self._cancel_pending_refresh()
|
||||
if self.other_networks.get_visible():
|
||||
self.other_networks.set_visible(False)
|
||||
@@ -633,37 +630,6 @@ class WifiConnections(Box):
|
||||
if hasattr(child, "on_changed"):
|
||||
child.on_changed()
|
||||
|
||||
def start_network_monitoring(self):
|
||||
"""Start periodic monitoring for network changes"""
|
||||
self.stop_network_monitoring()
|
||||
self.refresh_timer = GLib.timeout_add_seconds(5, self.periodic_network_refresh)
|
||||
|
||||
def stop_network_monitoring(self):
|
||||
"""Stop periodic monitoring"""
|
||||
if self.refresh_timer:
|
||||
GLib.source_remove(self.refresh_timer)
|
||||
self.refresh_timer = None
|
||||
|
||||
def periodic_network_refresh(self):
|
||||
"""Periodically refresh network list to catch external connections"""
|
||||
if self._destroyed:
|
||||
self.refresh_timer = None
|
||||
return False
|
||||
|
||||
if (
|
||||
self._update_in_progress
|
||||
or not self.wifi_service
|
||||
or not self.wifi_service.enabled
|
||||
):
|
||||
return True # Continue monitoring
|
||||
|
||||
try:
|
||||
self.update_networks()
|
||||
except Exception as e:
|
||||
logger.error(f"[WiFi] Error during periodic network refresh: {e}")
|
||||
|
||||
return True # Continue monitoring
|
||||
|
||||
def force_network_refresh(self):
|
||||
"""Force an immediate refresh of the network list"""
|
||||
if self._update_in_progress or self._destroyed:
|
||||
@@ -750,7 +716,6 @@ class WifiConnections(Box):
|
||||
def on_destroy(self, widget):
|
||||
"""Cleanup when widget is destroyed"""
|
||||
self._destroyed = True
|
||||
self.stop_network_monitoring()
|
||||
self._cancel_pending_refresh()
|
||||
for obj, sig_id in self._signal_ids:
|
||||
try:
|
||||
|
||||
@@ -137,6 +137,7 @@ class NotchPlayer(Box):
|
||||
self._update_from_service()
|
||||
self._sigs.append(service.connect("play", self._on_play))
|
||||
self._sigs.append(service.connect("pause", self._on_pause))
|
||||
self._sigs.append(service.connect("artwork-change", self._on_artwork_change))
|
||||
|
||||
if service.playback_status == "Playing":
|
||||
self._start_timer()
|
||||
|
||||
Reference in new issue
Block a user