Add library filter to artist tracks
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Sat, 20 Dec 2025 22:15:49 +0000 (23:15 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Sat, 20 Dec 2025 22:15:49 +0000 (23:15 +0100)
music_assistant/controllers/media/artists.py

index 7ae766dd55ab6929db15b7f0e9a36c96609071b5..95dbb43fe71a0523149ab33a685fefc729ff67dc 100644 (file)
@@ -115,8 +115,13 @@ class ArtistsController(MediaControllerBase[Artist]):
         item_id: str,
         provider_instance_id_or_domain: str,
         in_library_only: bool = False,
+        provider_filter: str | list[str] | None = None,
     ) -> list[Track]:
         """Return all/top tracks for an artist."""
+        if provider_filter and provider_instance_id_or_domain != "library":
+            raise MusicAssistantError("Cannot use provider_filter with specific provider request")
+        if isinstance(provider_filter, str):
+            provider_filter = [provider_filter]
         # always check if we have a library item for this artist
         library_artist = await self.get_library_item_by_prov_id(
             item_id, provider_instance_id_or_domain
@@ -125,7 +130,7 @@ class ArtistsController(MediaControllerBase[Artist]):
             return await self.get_provider_artist_toptracks(item_id, provider_instance_id_or_domain)
         db_items = await self.get_library_artist_tracks(library_artist.item_id)
         result: list[Track] = db_items
-        if in_library_only:
+        if in_library_only and not provider_filter:
             # return in-library items only
             return result
         # return all (unique) items from all providers
@@ -135,6 +140,8 @@ class ArtistsController(MediaControllerBase[Artist]):
         for provider_mapping in library_artist.provider_mappings:
             if provider_mapping.provider_instance not in unique_providers:
                 continue
+            if provider_filter and provider_mapping.provider_instance not in provider_filter:
+                continue
             provider_tracks = await self.get_provider_artist_toptracks(
                 provider_mapping.item_id, provider_mapping.provider_instance
             )