Fix player removal event sent when player only temporary unavailable (#2856)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 19 Dec 2025 16:29:00 +0000 (17:29 +0100)
committerGitHub <noreply@github.com>
Fri, 19 Dec 2025 16:29:00 +0000 (17:29 +0100)
music_assistant/controllers/players/player_controller.py

index 40a6da6a25c4a8cfa40caef0807587c789cb3aac..263976a77db2afd92e2ac3bd0d9da4aa38158f4f 100644 (file)
@@ -1412,12 +1412,22 @@ class PlayerController(CoreController):
             return
         await self._cleanup_player_memberships(player_id)
         del self._players[player_id]
-        self.logger.info("Player removed: %s", player.name)
         self.mass.player_queues.on_player_remove(player_id, permanent=permanent)
         await player.on_unload()
         if permanent:
+            # player permanent removal: delete its config
+            # and signal PLAYER_REMOVED event
             self.delete_player_config(player_id)
-        self.mass.signal_event(EventType.PLAYER_REMOVED, player_id)
+            self.logger.info("Player removed: %s", player.name)
+            self.mass.signal_event(EventType.PLAYER_REMOVED, player_id)
+        else:
+            # temporary unavailable: mark player as unavailable
+            # note: the player will be re-registered later if it comes back online
+            player.state.available = False
+            self.logger.info("Player unavailable: %s", player.name)
+            self.mass.signal_event(
+                EventType.PLAYER_UPDATED, object_id=player.player_id, data=player.state
+            )
 
     @api_command("players/remove", required_role="admin")
     async def remove(self, player_id: str) -> None: