Refresh Sonos source list on changes (#15605)

This commit is contained in:
Anders Melchiorsen 2018-07-23 12:31:03 +02:00 committed by Paulus Schoutsen
parent 1325682d82
commit fddfb9e412

View File

@ -447,11 +447,15 @@ class SonosDevice(MediaPlayerDevice):
self.update_volume() 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. # SoCo 0.14 raises a generic Exception on invalid xml in favorites.
# Filter those out now so our list is safe to use. # Filter those out now so our list is safe to use.
# pylint: disable=broad-except # pylint: disable=broad-except
try: try:
self._favorites = []
for fav in self.soco.music_library.get_sonos_favorites(): for fav in self.soco.music_library.get_sonos_favorites():
try: try:
if fav.reference.get_uri(): if fav.reference.get_uri():
@ -493,6 +497,9 @@ class SonosDevice(MediaPlayerDevice):
queue = _ProcessSonosEventQueue(self.update_groups) queue = _ProcessSonosEventQueue(self.update_groups)
player.zoneGroupTopology.subscribe(auto_renew=True, event_queue=queue) 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): def update(self):
"""Retrieve latest state.""" """Retrieve latest state."""
available = self._check_available() available = self._check_available()
@ -735,6 +742,11 @@ class SonosDevice(MediaPlayerDevice):
slave._sonos_group = sonos_group slave._sonos_group = sonos_group
slave.schedule_update_ha_state() 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 @property
def volume_level(self): def volume_level(self):
"""Volume level of the media player (0..1).""" """Volume level of the media player (0..1)."""