feat(media): Factory dispatcht auf win32 zum SmtcController

This commit is contained in:
2026-04-16 18:16:51 +02:00
parent 802e06acd9
commit 265ca3c212
2 changed files with 15 additions and 4 deletions
+10 -2
View File
@@ -14,8 +14,8 @@ def test_factory_returns_noop_when_disabled():
assert isinstance(controller, NoopController) assert isinstance(controller, NoopController)
def test_factory_returns_noop_on_non_linux(): def test_factory_returns_noop_on_other_platforms():
with patch.object(sys, "platform", "win32"): with patch.object(sys, "platform", "darwin"):
controller = create_media_controller(enabled=True) controller = create_media_controller(enabled=True)
assert isinstance(controller, NoopController) assert isinstance(controller, NoopController)
@@ -38,3 +38,11 @@ async def test_noop_controller_pause_is_noop():
def test_noop_controller_satisfies_protocol(): def test_noop_controller_satisfies_protocol():
controller = NoopController() controller = NoopController()
assert isinstance(controller, MediaController) assert isinstance(controller, MediaController)
@pytest.mark.skipif(sys.platform != "win32", reason="SmtcController nur auf Windows")
def test_factory_returns_smtc_on_win32_when_enabled():
from whisper_local.media._smtc import SmtcController
controller = create_media_controller(enabled=True)
assert isinstance(controller, SmtcController)
+5 -2
View File
@@ -13,8 +13,8 @@ class MediaController(Protocol):
def create_media_controller(enabled: bool) -> MediaController: def create_media_controller(enabled: bool) -> MediaController:
"""Erstellt den plattformspezifischen Media-Controller. """Erstellt den plattformspezifischen Media-Controller.
`enabled=False` → immer NoopController. Auf Nicht-Linux-Plattformen `enabled=False` → immer NoopController. Auf nicht unterstützten Plattformen
wird aktuell ebenfalls der NoopController zurückgegeben. wird ebenfalls der NoopController zurückgegeben.
""" """
if not enabled: if not enabled:
from whisper_local.media._noop import NoopController from whisper_local.media._noop import NoopController
@@ -22,5 +22,8 @@ def create_media_controller(enabled: bool) -> MediaController:
if sys.platform == "linux": if sys.platform == "linux":
from whisper_local.media._mpris import MprisController from whisper_local.media._mpris import MprisController
return MprisController() return MprisController()
if sys.platform == "win32":
from whisper_local.media._smtc import SmtcController
return SmtcController()
from whisper_local.media._noop import NoopController from whisper_local.media._noop import NoopController
return NoopController() return NoopController()