Fix: Do not retry Snapcast connection if we want to exit
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 28 Oct 2024 10:29:23 +0000 (11:29 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 28 Oct 2024 10:29:23 +0000 (11:29 +0100)
music_assistant/server/providers/snapcast/__init__.py

index b0cf60a6fef7e11f0a35185080ffa17f1ec28f63..0cc1b52385ea3506c1b7cc2892f91adb5eae980d 100644 (file)
@@ -254,6 +254,7 @@ class SnapCastProvider(PlayerProvider):
     _snapserver_runner: asyncio.Task | None
     _snapserver_started: asyncio.Event | None
     _ids_map: bidict  # ma_id / snapclient_id
+    _stop_called: bool
 
     def _get_snapclient_id(self, player_id: str) -> str:
         search_dict = self._ids_map
@@ -282,6 +283,7 @@ class SnapCastProvider(PlayerProvider):
         # set snapcast logging
         logging.getLogger("snapcast").setLevel(self.logger.level)
         self._use_builtin_server = not self.config.get_value(CONF_USE_EXTERNAL_SERVER)
+        self._stop_called = False
         if self._use_builtin_server:
             self._snapcast_server_host = "127.0.0.1"
             self._snapcast_server_control_port = DEFAULT_SNAPSERVER_PORT
@@ -334,6 +336,7 @@ class SnapCastProvider(PlayerProvider):
 
     async def unload(self) -> None:
         """Handle close/cleanup of the provider."""
+        self._stop_called = True
         for snap_client_id in self._snapserver.clients:
             player_id = self._get_ma_id(snap_client_id)
             await self.cmd_stop(player_id)
@@ -729,6 +732,9 @@ class SnapCastProvider(PlayerProvider):
 
     def _handle_disconnect(self, exc: Exception) -> None:
         """Handle disconnect callback from snapserver."""
+        if self._stop_called:
+            # we're instructed to stop/exit, so no need to restart the connection
+            return
         self.logger.info(
             "Connection to SnapServer lost, reason: %s. Reloading provider in 5 seconds.",
             str(exc),