fix(media): Circuit-Breaker für D-Bus-Connect-Fehler
Nach dem ersten fehlgeschlagenen Bus-Connect wird der Controller dauerhaft deaktiviert, statt bei jedem Hotkey-Druck einen neuen Connect-Versuch zu starten. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -18,8 +18,11 @@ class MprisController:
|
||||
def __init__(self) -> None:
|
||||
self._paused: list[str] = []
|
||||
self._bus: Any = None
|
||||
self._bus_broken: bool = False
|
||||
|
||||
async def _ensure_bus(self) -> Any:
|
||||
if self._bus_broken:
|
||||
raise RuntimeError("D-Bus session bus is unavailable")
|
||||
if self._bus is None:
|
||||
from dbus_next.aio import MessageBus
|
||||
self._bus = await MessageBus().connect()
|
||||
@@ -65,7 +68,11 @@ class MprisController:
|
||||
try:
|
||||
names = await self._list_player_names()
|
||||
except Exception as e:
|
||||
logger.warning("D-Bus nicht erreichbar, überspringe Media-Pause: %s", e)
|
||||
if not self._bus_broken:
|
||||
logger.warning(
|
||||
"D-Bus nicht erreichbar, Media-Pause dauerhaft deaktiviert: %s", e
|
||||
)
|
||||
self._bus_broken = True
|
||||
self._paused = []
|
||||
return
|
||||
results = await asyncio.gather(
|
||||
|
||||
Reference in New Issue
Block a user