Handle builtin player in player filter
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 28 Nov 2025 22:30:01 +0000 (23:30 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 28 Nov 2025 22:30:01 +0000 (23:30 +0100)
music_assistant/controllers/webserver/auth.py
music_assistant/providers/builtin_player/provider.py

index 900b8ea7862b79ca75e3c0d23b0ce6a053df5cec..d51ba01d357c6bf7872a44a8fe97447f72abc7a4 100644 (file)
@@ -1217,7 +1217,7 @@ class AuthenticationManager:
         else:
             self.logger.info("Password changed for user %s", target_user.username)
 
-    async def _update_user_filters(
+    async def update_user_filters(
         self,
         target_user: User,
         player_filter: list[str] | None,
@@ -1326,7 +1326,7 @@ class AuthenticationManager:
         if player_filter is not None or provider_filter is not None:
             if not is_admin_update:
                 raise InsufficientPermissions("Only admins can update player/provider filters")
-            target_user = await self._update_user_filters(
+            target_user = await self.update_user_filters(
                 target_user, player_filter, provider_filter
             )
 
index e5ac6efb3834fa3f5485cd10cc8995cb0392f94d..5d4058967b356b8cf753e142a57ffcf4260dc86c 100644 (file)
@@ -9,6 +9,7 @@ import shortuuid
 from music_assistant_models.builtin_player import BuiltinPlayerEvent, BuiltinPlayerState
 from music_assistant_models.enums import BuiltinPlayerEventType, EventType, PlayerFeature
 
+from music_assistant.controllers.webserver.helpers.auth_middleware import get_current_user
 from music_assistant.models.player import Player
 from music_assistant.models.player_provider import PlayerProvider
 
@@ -70,6 +71,19 @@ class BuiltinPlayerProvider(PlayerProvider):
             PlayerFeature.POWER,
         }
 
+        # special case: user has player filter enabled but wants
+        # to use the builtin player on their device, so add it to their filter
+        current_user = get_current_user()
+        if (
+            current_user
+            and current_user.player_filter
+            and player_id not in current_user.player_filter
+        ):
+            current_user.player_filter.append(player_id)
+            await self.mass.webserver.auth.update_user_filters(
+                current_user, player_filter=current_user.player_filter, provider_filter=None
+            )
+
         player = self.mass.players.get(player_id)
 
         if player is None: