1
mirror of https://github.com/home-assistant/core synced 2024-07-30 21:18:57 +02:00

Add repeat to roon media player (#88851)

This commit is contained in:
Greg Dowling 2023-03-05 14:43:52 +00:00 committed by GitHub
parent 2e1f6cad96
commit 7b54061ab7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -12,6 +12,7 @@ from homeassistant.components.media_player import (
MediaPlayerEntity,
MediaPlayerEntityFeature,
MediaPlayerState,
RepeatMode,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import DEVICE_DEFAULT_NAME
@ -35,6 +36,16 @@ SERVICE_TRANSFER = "transfer"
ATTR_TRANSFER = "transfer_id"
REPEAT_MODE_MAPPING_TO_HA = {
"loop": RepeatMode.ALL,
"disabled": RepeatMode.OFF,
"loop_one": RepeatMode.ONE,
}
REPEAT_MODE_MAPPING_TO_ROON = {
value: key for key, value in REPEAT_MODE_MAPPING_TO_HA.items()
}
async def async_setup_entry(
hass: HomeAssistant,
@ -84,6 +95,7 @@ class RoonDevice(MediaPlayerEntity):
| MediaPlayerEntityFeature.STOP
| MediaPlayerEntityFeature.PREVIOUS_TRACK
| MediaPlayerEntityFeature.NEXT_TRACK
| MediaPlayerEntityFeature.REPEAT_SET
| MediaPlayerEntityFeature.SHUFFLE_SET
| MediaPlayerEntityFeature.SEEK
| MediaPlayerEntityFeature.TURN_ON
@ -262,6 +274,9 @@ class RoonDevice(MediaPlayerEntity):
self._attr_unique_id = self.player_data["dev_id"]
self._zone_id = self.player_data["zone_id"]
self._output_id = self.player_data["output_id"]
self._attr_repeat = REPEAT_MODE_MAPPING_TO_HA.get(
self.player_data["settings"]["loop"]
)
self._attr_shuffle = self.player_data["settings"]["shuffle"]
self._attr_name = self.player_data["display_name"]
@ -331,7 +346,7 @@ class RoonDevice(MediaPlayerEntity):
def set_volume_level(self, volume: float) -> None:
"""Send new volume_level to device."""
volume = int(volume * 100)
volume = volume * 100
self._server.roonapi.set_volume_percent(self.output_id, volume)
def mute_volume(self, mute=True):
@ -373,6 +388,12 @@ class RoonDevice(MediaPlayerEntity):
"""Set shuffle state."""
self._server.roonapi.shuffle(self.output_id, shuffle)
def set_repeat(self, repeat: RepeatMode) -> None:
"""Set repeat mode."""
if repeat not in REPEAT_MODE_MAPPING_TO_ROON:
raise ValueError(f"Unsupported repeat mode: {repeat}")
self._server.roonapi.repeat(self.output_id, REPEAT_MODE_MAPPING_TO_ROON[repeat])
def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
"""Send the play_media command to the media player."""