diff --git a/homeassistant/components/media_player/sonos.py b/homeassistant/components/media_player/sonos.py index 8a92d89ce675b0897c0be71154d40d1b33e06d2d..5375001f75c53f04d8bb5a9b221485bc23cd2867 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)."""