From d755952148bcfead68e8d9e46a72376a4bf8bd6a Mon Sep 17 00:00:00 2001 From: jjlawren Date: Sun, 13 Jun 2021 17:24:46 -0500 Subject: [PATCH] Set playlist name on playing Sonos media (#51685) * Use playlist name as media_channel if available * Use proper playlist attribute --- homeassistant/components/sonos/media_player.py | 5 +++++ homeassistant/components/sonos/speaker.py | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/sonos/media_player.py b/homeassistant/components/sonos/media_player.py index 6d26363f83b..c44f7fbd4fb 100644 --- a/homeassistant/components/sonos/media_player.py +++ b/homeassistant/components/sonos/media_player.py @@ -366,6 +366,11 @@ class SonosMediaPlayerEntity(SonosEntity, MediaPlayerEntity): """Channel currently playing.""" return self.media.channel or None + @property + def media_playlist(self) -> str | None: + """Title of playlist currently playing.""" + return self.media.playlist_name + @property # type: ignore[misc] def media_artist(self) -> str | None: """Artist of current playing media, music track only.""" diff --git a/homeassistant/components/sonos/speaker.py b/homeassistant/components/sonos/speaker.py index 2ddd7148478..59ed94adec6 100644 --- a/homeassistant/components/sonos/speaker.py +++ b/homeassistant/components/sonos/speaker.py @@ -14,7 +14,7 @@ import urllib.parse import async_timeout from pysonos.alarms import get_alarms from pysonos.core import MUSIC_SRC_LINE_IN, MUSIC_SRC_RADIO, MUSIC_SRC_TV, SoCo -from pysonos.data_structures import DidlAudioBroadcast +from pysonos.data_structures import DidlAudioBroadcast, DidlPlaylistContainer from pysonos.events_base import Event as SonosEvent, SubscriptionBase from pysonos.exceptions import SoCoException from pysonos.music_library import MusicLibrary @@ -111,6 +111,7 @@ class SonosMedia: self.duration: float | None = None self.image_url: str | None = None self.queue_position: int | None = None + self.playlist_name: str | None = None self.source_name: str | None = None self.title: str | None = None self.uri: str | None = None @@ -125,6 +126,7 @@ class SonosMedia: self.channel = None self.duration = None self.image_url = None + self.playlist_name = None self.queue_position = None self.source_name = None self.title = None @@ -899,6 +901,9 @@ class SonosSpeaker: variables["enqueued_transport_uri"] or variables["current_track_uri"] ) music_source = self.soco.music_source_from_uri(track_uri) + if uri_meta_data := variables.get("enqueued_transport_uri_meta_data"): + if isinstance(uri_meta_data, DidlPlaylistContainer): + self.media.playlist_name = uri_meta_data.title else: self.media.play_mode = self.soco.play_mode music_source = self.soco.music_source