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, MediaPlayerEntity,
MediaPlayerEntityFeature, MediaPlayerEntityFeature,
MediaPlayerState, MediaPlayerState,
RepeatMode,
) )
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import DEVICE_DEFAULT_NAME from homeassistant.const import DEVICE_DEFAULT_NAME
@ -35,6 +36,16 @@ SERVICE_TRANSFER = "transfer"
ATTR_TRANSFER = "transfer_id" 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( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
@ -84,6 +95,7 @@ class RoonDevice(MediaPlayerEntity):
| MediaPlayerEntityFeature.STOP | MediaPlayerEntityFeature.STOP
| MediaPlayerEntityFeature.PREVIOUS_TRACK | MediaPlayerEntityFeature.PREVIOUS_TRACK
| MediaPlayerEntityFeature.NEXT_TRACK | MediaPlayerEntityFeature.NEXT_TRACK
| MediaPlayerEntityFeature.REPEAT_SET
| MediaPlayerEntityFeature.SHUFFLE_SET | MediaPlayerEntityFeature.SHUFFLE_SET
| MediaPlayerEntityFeature.SEEK | MediaPlayerEntityFeature.SEEK
| MediaPlayerEntityFeature.TURN_ON | MediaPlayerEntityFeature.TURN_ON
@ -262,6 +274,9 @@ class RoonDevice(MediaPlayerEntity):
self._attr_unique_id = self.player_data["dev_id"] self._attr_unique_id = self.player_data["dev_id"]
self._zone_id = self.player_data["zone_id"] self._zone_id = self.player_data["zone_id"]
self._output_id = self.player_data["output_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_shuffle = self.player_data["settings"]["shuffle"]
self._attr_name = self.player_data["display_name"] self._attr_name = self.player_data["display_name"]
@ -331,7 +346,7 @@ class RoonDevice(MediaPlayerEntity):
def set_volume_level(self, volume: float) -> None: def set_volume_level(self, volume: float) -> None:
"""Send new volume_level to device.""" """Send new volume_level to device."""
volume = int(volume * 100) volume = volume * 100
self._server.roonapi.set_volume_percent(self.output_id, volume) self._server.roonapi.set_volume_percent(self.output_id, volume)
def mute_volume(self, mute=True): def mute_volume(self, mute=True):
@ -373,6 +388,12 @@ class RoonDevice(MediaPlayerEntity):
"""Set shuffle state.""" """Set shuffle state."""
self._server.roonapi.shuffle(self.output_id, shuffle) 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: def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
"""Send the play_media command to the media player.""" """Send the play_media command to the media player."""