Files
whisper-local/whisper_local/media/_smtc.py
T
info ed03d954a6 feat(media): SmtcController Skeleton mit circuit-breaker
Circuit-breaker-Pattern: Nach erstem Fehler beim SMTC-Manager-Zugriff
bleibt _broken=true und verhindert alle weiteren Zugriff-Versuche.
Logs Warnung einmalig und cleart _paused.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 20:11:02 +02:00

43 lines
1.2 KiB
Python

"""Windows SMTC-Implementierung via pywinrt."""
import logging
from typing import Any
logger = logging.getLogger(__name__)
class SmtcController:
def __init__(self) -> None:
self._paused: list[str] = []
self._manager: Any = None
self._broken: bool = False
async def _ensure_manager(self) -> Any:
if self._broken:
raise RuntimeError("SMTC nicht verfügbar")
if self._manager is None:
from winrt.windows.media.control import (
GlobalSystemMediaTransportControlsSessionManager,
)
self._manager = (
await GlobalSystemMediaTransportControlsSessionManager.request_async()
)
return self._manager
async def pause(self) -> None:
if self._broken:
self._paused = []
return
try:
await self._ensure_manager()
except Exception as e:
logger.warning(
"SMTC nicht erreichbar, Media-Pause dauerhaft deaktiviert: %s", e
)
self._broken = True
self._paused = []
return
async def resume(self) -> None:
pass