Use attributes in roon media player (#82838)

* Use _attr_state in roon media player

* Remove more properties

* Use early exit
This commit is contained in:
epenet 2022-11-28 14:11:55 +01:00 committed by GitHub
parent 476821bbf8
commit fa08916a0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -98,24 +98,19 @@ class RoonDevice(MediaPlayerEntity):
"""Initialize Roon device object."""
self._remove_signal_status = None
self._server = server
self._available = True
self._last_position_update = None
self._attr_available = True
self._supports_standby = False
self._state = MediaPlayerState.IDLE
self._unique_id = None
self._attr_state = MediaPlayerState.IDLE
self._zone_id = None
self._output_id = None
self._name = DEVICE_DEFAULT_NAME
self._media_title = None
self._media_album_name = None
self._media_artist = None
self._media_position = 0
self._media_duration = 0
self._is_volume_muted = False
self._volume_step = 0
self._shuffle = False
self._media_image_url = None
self._volume_level = 0
self._attr_name = DEVICE_DEFAULT_NAME
self._attr_media_position = 0
self._attr_media_duration = 0
self._attr_is_volume_muted = False
self._attr_volume_step = 0
self._attr_shuffle = False
self._attr_media_image_url = None
self._attr_volume_level = 0
self.update_data(player_data)
async def async_added_to_hass(self) -> None:
@ -135,11 +130,6 @@ class RoonDevice(MediaPlayerEntity):
self.update_data(player_data)
self.async_write_ha_state()
@property
def available(self):
"""Return True if entity is available."""
return self._available
@property
def group_members(self):
"""Return the grouped players."""
@ -148,8 +138,10 @@ class RoonDevice(MediaPlayerEntity):
return [self._server.entity_id(roon_name) for roon_name in roon_names]
@property
def device_info(self) -> DeviceInfo:
def device_info(self) -> DeviceInfo | None:
"""Return the device info."""
if self.unique_id is None:
return None
if self.player_data.get("source_controls"):
dev_model = self.player_data["source_controls"][0].get("display_name")
return DeviceInfo(
@ -166,14 +158,14 @@ class RoonDevice(MediaPlayerEntity):
self.player_data = player_data
if not self.player_data["is_available"]:
# this player was removed
self._available = False
self._state = MediaPlayerState.OFF
self._attr_available = False
self._attr_state = MediaPlayerState.OFF
else:
self._available = True
self._attr_available = True
# determine player state
self.update_state()
if self.state == MediaPlayerState.PLAYING:
self._last_position_update = utcnow()
self._attr_media_position_updated_at = utcnow()
@classmethod
def _parse_volume(cls, player_data):
@ -263,37 +255,25 @@ class RoonDevice(MediaPlayerEntity):
new_state = MediaPlayerState.PAUSED
else:
new_state = MediaPlayerState.IDLE
self._state = new_state
self._unique_id = self.player_data["dev_id"]
self._attr_state = new_state
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._shuffle = self.player_data["settings"]["shuffle"]
self._name = self.player_data["display_name"]
self._attr_shuffle = self.player_data["settings"]["shuffle"]
self._attr_name = self.player_data["display_name"]
volume = RoonDevice._parse_volume(self.player_data)
self._is_volume_muted = volume["muted"]
self._volume_step = volume["step"]
self._is_volume_muted = volume["muted"]
self._volume_level = volume["level"]
self._attr_is_volume_muted = volume["muted"]
self._attr_volume_step = volume["step"]
self._attr_volume_level = volume["level"]
now_playing = self._parse_now_playing(self.player_data)
self._media_title = now_playing["title"]
self._media_artist = now_playing["artist"]
self._media_album_name = now_playing["album"]
self._media_position = now_playing["position"]
self._media_duration = now_playing["duration"]
self._media_image_url = now_playing["image"]
@property
def media_position_updated_at(self):
"""When was the position of the current playing media valid."""
# Returns value from homeassistant.util.dt.utcnow().
return self._last_position_update
@property
def unique_id(self):
"""Return the id of this roon client."""
return self._unique_id
self._attr_media_title = now_playing["title"]
self._attr_media_artist = now_playing["artist"]
self._attr_media_album_name = now_playing["album"]
self._attr_media_position = now_playing["position"]
self._attr_media_duration = now_playing["duration"]
self._attr_media_image_url = now_playing["image"]
@property
def zone_id(self):
@ -306,75 +286,15 @@ class RoonDevice(MediaPlayerEntity):
return self._output_id
@property
def name(self):
"""Return device name."""
return self._name
@property
def media_title(self):
"""Return title currently playing."""
return self._media_title
@property
def media_album_name(self):
"""Album name of current playing media (Music track only)."""
return self._media_album_name
@property
def media_artist(self):
"""Artist of current playing media (Music track only)."""
return self._media_artist
@property
def media_album_artist(self):
def media_album_artist(self) -> str | None:
"""Album artist of current playing media (Music track only)."""
return self._media_artist
@property
def media_image_url(self):
"""Image url of current playing media."""
return self._media_image_url
@property
def media_position(self):
"""Return position currently playing."""
return self._media_position
@property
def media_duration(self):
"""Return total runtime length."""
return self._media_duration
@property
def volume_level(self):
"""Return current volume level."""
return self._volume_level
@property
def is_volume_muted(self):
"""Return mute state."""
return self._is_volume_muted
@property
def volume_step(self):
""".Return volume step size."""
return self._volume_step
return self.media_artist
@property
def supports_standby(self):
"""Return power state of source controls."""
return self._supports_standby
@property
def state(self):
"""Return current playstate of the device."""
return self._state
@property
def shuffle(self):
"""Boolean if shuffle is enabled."""
return self._shuffle
def media_play(self) -> None:
"""Send play command to device."""
self._server.roonapi.playback_control(self.output_id, "play")
@ -403,7 +323,7 @@ class RoonDevice(MediaPlayerEntity):
"""Send seek command to device."""
self._server.roonapi.seek(self.output_id, position)
# Seek doesn't cause an async update - so force one
self._media_position = position
self._attr_media_position = round(position)
self.schedule_update_ha_state()
def set_volume_level(self, volume: float) -> None: