Fix DLNA players not reconnecting (#3132)
authorMarvin Schenkel <marvinschenkel@gmail.com>
Tue, 10 Feb 2026 18:10:43 +0000 (19:10 +0100)
committerGitHub <noreply@github.com>
Tue, 10 Feb 2026 18:10:43 +0000 (19:10 +0100)
* Fix DLNA players not reconnecting

* Change to public method for availability

music_assistant/providers/dlna/player.py
music_assistant/providers/dlna/provider.py

index 69948c37b753d2187fee6b0d4f862eec0d676b46..a2966503caa6ea161144dd48852dc3c7a33acbd9 100644 (file)
@@ -86,6 +86,10 @@ class DLNAPlayer(Player):
         self.last_seen = time.time()
         self.last_command = time.time()
 
+    def set_available(self, available: bool) -> None:
+        """Set the availability of the player."""
+        self._attr_available = available
+
     async def _device_connect(self) -> None:
         """Connect DLNA/DMR Device."""
         self.logger.debug("Connecting to device at %s", self.description_url)
index 752f7686f6ff51bc77180a3d9b4c28a907d00378..4216fc6ca8bf13b1a1b53cf4a3486049e481cd39 100644 (file)
@@ -103,11 +103,11 @@ class DLNAPlayerProvider(PlayerProvider):
         finally:
             self._discovery_running = False
 
-        def reschedule() -> None:
-            self.mass.create_task(self.discover_players(use_multicast=not use_multicast))
+            def reschedule() -> None:
+                self.mass.create_task(self.discover_players(use_multicast=not use_multicast))
 
-        # reschedule self once finished
-        self.mass.loop.call_later(300, reschedule)
+            # reschedule self once finished
+            self.mass.loop.call_later(300, reschedule)
 
     async def _device_disconnect(self, dlna_player: DLNAPlayer) -> None:
         """
@@ -125,6 +125,7 @@ class DLNAPlayerProvider(PlayerProvider):
             dlna_player.device.on_event = None
             old_device = dlna_player.device
             dlna_player.device = None
+            dlna_player.set_available(False)
             await old_device.async_unsubscribe_services()
 
     async def _device_discovered(self, udn: str, description_url: str) -> None: