From fddfb9e41251210a4edabf37a13a0272da52ac56 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen <amelchio@nogoto.net> Date: Mon, 23 Jul 2018 12:31:03 +0200 Subject: [PATCH] Refresh Sonos source list on changes (#15605) --- homeassistant/components/media_player/sonos.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/media_player/sonos.py b/homeassistant/components/media_player/sonos.py index 8a92d89ce67..5375001f75c 100644 --- a/homeassistant/components/media_player/sonos.py +++ b/homeassistant/components/media_player/sonos.py @@ -447,11 +447,15 @@ class SonosDevice(MediaPlayerDevice): self.update_volume() - self._favorites = [] + self._set_favorites() + + def _set_favorites(self): + """Set available favorites.""" # SoCo 0.14 raises a generic Exception on invalid xml in favorites. # Filter those out now so our list is safe to use. # pylint: disable=broad-except try: + self._favorites = [] for fav in self.soco.music_library.get_sonos_favorites(): try: if fav.reference.get_uri(): @@ -493,6 +497,9 @@ class SonosDevice(MediaPlayerDevice): queue = _ProcessSonosEventQueue(self.update_groups) player.zoneGroupTopology.subscribe(auto_renew=True, event_queue=queue) + queue = _ProcessSonosEventQueue(self.update_content) + player.contentDirectory.subscribe(auto_renew=True, event_queue=queue) + def update(self): """Retrieve latest state.""" available = self._check_available() @@ -735,6 +742,11 @@ class SonosDevice(MediaPlayerDevice): slave._sonos_group = sonos_group slave.schedule_update_ha_state() + def update_content(self, event=None): + """Update information about available content.""" + self._set_favorites() + self.schedule_update_ha_state() + @property def volume_level(self): """Volume level of the media player (0..1).""" -- GitLab