_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
# 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
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)
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),