diff --git a/homeassistant/components/sonos/speaker.py b/homeassistant/components/sonos/speaker.py index e827b35b16d..c1f1dbb9104 100644 --- a/homeassistant/components/sonos/speaker.py +++ b/homeassistant/components/sonos/speaker.py @@ -844,7 +844,8 @@ class SonosSpeaker: if music_source == MUSIC_SRC_RADIO: self.update_media_radio(variables) else: - self.update_media_music(update_position, track_info) + self.update_media_music(track_info) + self.update_media_position(update_position, track_info) self.write_entity_states() @@ -907,11 +908,25 @@ class SonosSpeaker: if fav.reference.get_uri() == media_info["uri"]: self.media.source_name = fav.title - def update_media_music(self, update_media_position: bool, track_info: dict) -> None: + def update_media_music(self, track_info: dict) -> None: + """Update state when playing music tracks.""" + self.media.image_url = track_info.get("album_art") + + playlist_position = int(track_info.get("playlist_position")) # type: ignore + if playlist_position > 0: + self.media.queue_position = playlist_position - 1 + + def update_media_position( + self, update_media_position: bool, track_info: dict + ) -> None: """Update state when playing music tracks.""" self.media.duration = _timespan_secs(track_info.get("duration")) current_position = _timespan_secs(track_info.get("position")) + if self.media.duration == 0: + self.media.clear_position() + return + # player started reporting position? if current_position is not None and self.media.position is None: update_media_position = True @@ -935,9 +950,3 @@ class SonosSpeaker: elif update_media_position: self.media.position = current_position self.media.position_updated_at = dt_util.utcnow() - - self.media.image_url = track_info.get("album_art") - - playlist_position = int(track_info.get("playlist_position")) # type: ignore - if playlist_position > 0: - self.media.queue_position = playlist_position - 1