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