feat(media): MprisController.resume() stellt nur eigene Pausen wieder her
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -61,3 +61,39 @@ async def test_pause_pauses_only_playing_players(monkeypatch):
|
|||||||
playing.call_pause.assert_awaited_once()
|
playing.call_pause.assert_awaited_once()
|
||||||
paused.call_pause.assert_not_awaited()
|
paused.call_pause.assert_not_awaited()
|
||||||
assert controller._paused == ["org.mpris.MediaPlayer2.spotify"]
|
assert controller._paused == ["org.mpris.MediaPlayer2.spotify"]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_resume_plays_only_previously_paused(monkeypatch):
|
||||||
|
from whisper_local.media._mpris import MprisController
|
||||||
|
|
||||||
|
spotify = _make_player("Paused")
|
||||||
|
vlc = _make_player("Paused")
|
||||||
|
|
||||||
|
async def fake_get_player(name: str):
|
||||||
|
return {"org.mpris.MediaPlayer2.spotify": spotify,
|
||||||
|
"org.mpris.MediaPlayer2.vlc": vlc}[name]
|
||||||
|
|
||||||
|
controller = MprisController()
|
||||||
|
controller._paused = ["org.mpris.MediaPlayer2.spotify"]
|
||||||
|
monkeypatch.setattr(controller, "_get_player_interface", fake_get_player)
|
||||||
|
|
||||||
|
await controller.resume()
|
||||||
|
|
||||||
|
spotify.call_play.assert_awaited_once()
|
||||||
|
vlc.call_play.assert_not_awaited()
|
||||||
|
assert controller._paused == []
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_resume_with_empty_paused_list_is_noop(monkeypatch):
|
||||||
|
from whisper_local.media._mpris import MprisController
|
||||||
|
|
||||||
|
controller = MprisController()
|
||||||
|
controller._paused = []
|
||||||
|
get_player = AsyncMock()
|
||||||
|
monkeypatch.setattr(controller, "_get_player_interface", get_player)
|
||||||
|
|
||||||
|
await controller.resume()
|
||||||
|
|
||||||
|
get_player.assert_not_awaited()
|
||||||
|
|||||||
@@ -61,5 +61,16 @@ class MprisController:
|
|||||||
if isinstance(name, str)
|
if isinstance(name, str)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
async def _resume_player(self, bus_name: str) -> None:
|
||||||
|
player = await self._get_player_interface(bus_name)
|
||||||
|
await player.call_play()
|
||||||
|
|
||||||
async def resume(self) -> None:
|
async def resume(self) -> None:
|
||||||
return None
|
if not self._paused:
|
||||||
|
return
|
||||||
|
to_resume = self._paused
|
||||||
|
self._paused = []
|
||||||
|
await asyncio.gather(
|
||||||
|
*(self._resume_player(n) for n in to_resume),
|
||||||
|
return_exceptions=True,
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user