"""Bottom status bar: battery level + current time, refreshed every second. Battery is read via psutil (cross-platform); on a desktop machine with no battery, psutil.sensors_battery() returns None and the bar just shows time. """ from __future__ import annotations from datetime import datetime from textual.widgets import Static try: import psutil except ImportError: psutil = None # battery display degrades gracefully to time-only class StatusBar(Static): def on_mount(self) -> None: self._refresh() self.set_interval(1.0, self._refresh) def _refresh(self) -> None: self.update(self._render_text()) def _render_text(self) -> str: parts = [] battery = self._battery_text() if battery: parts.append(battery) parts.append(datetime.now().strftime("%H:%M:%S")) return " ".join(parts) def _battery_text(self) -> str | None: if psutil is None: return None try: battery = psutil.sensors_battery() except Exception: return None if battery is None: return None state = "lädt" if battery.power_plugged else "Akku" return f"{state} {round(battery.percent)}%"