feat(media): SmtcController.pause() erkennt und pausiert PLAYING-Sessions
This commit is contained in:
@@ -24,12 +24,32 @@ class SmtcController:
|
||||
)
|
||||
return self._manager
|
||||
|
||||
async def _pause_session(self, session: Any) -> str | None:
|
||||
"""Pausiert eine Session wenn sie spielt. Gibt AUMID zurück, sonst None."""
|
||||
from winrt.windows.media.control import (
|
||||
GlobalSystemMediaTransportControlsSessionPlaybackStatus,
|
||||
)
|
||||
aumid = session.source_app_user_model_id
|
||||
try:
|
||||
info = session.get_playback_info()
|
||||
if (
|
||||
info.playback_status
|
||||
!= GlobalSystemMediaTransportControlsSessionPlaybackStatus.PLAYING
|
||||
):
|
||||
return None
|
||||
await session.try_pause_async()
|
||||
return aumid
|
||||
except Exception as e:
|
||||
logger.warning("Konnte Session %s nicht pausieren: %s", aumid, e)
|
||||
return None
|
||||
|
||||
async def pause(self) -> None:
|
||||
if self._broken:
|
||||
self._paused = []
|
||||
return
|
||||
|
||||
try:
|
||||
await self._ensure_manager()
|
||||
manager = await self._ensure_manager()
|
||||
except Exception as e:
|
||||
logger.warning(
|
||||
"SMTC nicht erreichbar, Media-Pause dauerhaft deaktiviert: %s", e
|
||||
@@ -38,5 +58,13 @@ class SmtcController:
|
||||
self._paused = []
|
||||
return
|
||||
|
||||
sessions = list(manager.get_sessions())
|
||||
paused = []
|
||||
for session in sessions:
|
||||
result = await self._pause_session(session)
|
||||
if result is not None:
|
||||
paused.append(result)
|
||||
self._paused = paused
|
||||
|
||||
async def resume(self) -> None:
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user