suppress some exceptions
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 29 Jan 2024 21:35:55 +0000 (22:35 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 29 Jan 2024 21:35:55 +0000 (22:35 +0100)
music_assistant/server/providers/sonos/__init__.py
music_assistant/server/providers/sonos/player.py

index ce2e09845180d48110daf31b71af9ef20829bdcc..341d48475a064f159e61a0c59e66106581c4eac0 100644 (file)
@@ -11,7 +11,6 @@ import asyncio
 import logging
 import time
 from collections import OrderedDict
-from contextlib import suppress
 from dataclasses import dataclass, field
 from typing import TYPE_CHECKING
 
@@ -20,7 +19,6 @@ from requests.exceptions import RequestException
 from soco import events_asyncio, zonegroupstate
 from soco.core import SoCo
 from soco.discovery import discover
-from soco.exceptions import SoCoUPnPException
 
 from music_assistant.common.models.config_entries import (
     CONF_ENTRY_CROSSFADE,
@@ -407,11 +405,15 @@ class SonosPlayerProvider(PlayerProvider):
         if sonos_player.crossfade != crossfade:
 
             def set_crossfade():
-                sonos_player.soco.cross_fade = crossfade
-                sonos_player.crossfade = crossfade
+                try:
+                    sonos_player.soco.cross_fade = crossfade
+                    sonos_player.crossfade = crossfade
+                except Exception as err:
+                    self.logger.warning(
+                        "Unable to set crossfade for player %s: %s", sonos_player.zone_name, err
+                    )
 
-            with suppress(SoCoUPnPException):
-                await asyncio.to_thread(set_crossfade)
+            await asyncio.to_thread(set_crossfade)
 
         await self._enqueue_item(sonos_player, url=url, queue_item=queue_item)
 
@@ -535,13 +537,19 @@ class SonosPlayerProvider(PlayerProvider):
     ) -> None:
         """Enqueue a queue item to the Sonos player Queue."""
         metadata = create_didl_metadata(self.mass, url, queue_item)
-        await asyncio.to_thread(
-            sonos_player.soco.avTransport.SetNextAVTransportURI,
-            [("InstanceID", 0), ("NextURI", url), ("NextURIMetaData", metadata)],
-            timeout=60,
-        )
-        self.logger.debug(
-            "Enqued next track (%s) to player %s",
-            queue_item.name if queue_item else url,
-            sonos_player.soco.player_name,
-        )
+        try:
+            await asyncio.to_thread(
+                sonos_player.soco.avTransport.SetNextAVTransportURI,
+                [("InstanceID", 0), ("NextURI", url), ("NextURIMetaData", metadata)],
+                timeout=60,
+            )
+        except Exception as err:
+            self.logger.warning(
+                "Unable to enqueue next track on player: %s: %s", sonos_player.zone_name, err
+            )
+        else:
+            self.logger.debug(
+                "Enqued next track (%s) to player %s",
+                queue_item.name if queue_item else url,
+                sonos_player.soco.player_name,
+            )
index b1f3b0579be76941db6c669c3e307bffd0d6f4ff..fb9aea0ed894f878538867b967cb62c2836b0596 100644 (file)
@@ -746,7 +746,11 @@ class SonosPlayer:
         self.title = None
         self.uri = None
 
-        track_info = self.poll_track_info()
+        try:
+            track_info = self.poll_track_info()
+        except SonosUpdateError as err:
+            self.logger.warning("Fetching track info failed: %s", err)
+            return
         if not track_info["uri"]:
             return
         self.uri = track_info["uri"]