Fix library provider filter and subinstance match
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 8 Dec 2025 10:40:04 +0000 (11:40 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 8 Dec 2025 10:40:04 +0000 (11:40 +0100)
music_assistant/controllers/media/albums.py
music_assistant/controllers/media/artists.py
music_assistant/controllers/media/audiobooks.py
music_assistant/controllers/media/base.py
music_assistant/controllers/media/podcasts.py
music_assistant/controllers/media/tracks.py
music_assistant/controllers/music.py

index 205e2b36cf9e10384483cdce6cd2ecb1d99cd389..ad0ea26ba62484f890a3d313a5a8c48e03623905 100644 (file)
@@ -120,7 +120,7 @@ class AlbumsController(MediaControllerBase[Album]):
         :param limit: Maximum number of items to return.
         :param offset: Number of items to skip.
         :param order_by: Order by field (e.g. 'sort_name', 'timestamp_added').
-        :param provider: Filter by provider instance ID or domain (single string or list).
+        :param provider: Filter by provider instance ID (single string or list).
         :param extra_query: Additional SQL query string.
         :param extra_query_params: Additional query parameters.
         :param album_types: Filter by album types.
index 9a362101f669b8078bc6d31e58aaa176a720165a..e9a41d1145b35dfa7e90d86f9dc204d70446beae 100644 (file)
@@ -82,7 +82,7 @@ class ArtistsController(MediaControllerBase[Artist]):
         :param limit: Maximum number of items to return.
         :param offset: Number of items to skip.
         :param order_by: Order by field (e.g. 'sort_name', 'timestamp_added').
-        :param provider: Filter by provider instance ID or domain (single string or list).
+        :param provider: Filter by provider instance ID (single string or list).
         :param extra_query: Additional SQL query string.
         :param extra_query_params: Additional query parameters.
         :param album_artists_only: Only return artists that have albums.
index 20bf2dfd8f4fd6b02ec3a31cf23551936df22887..aa0c94034a9cd622f231689cbcff77a80a674705 100644 (file)
@@ -77,7 +77,7 @@ class AudiobooksController(MediaControllerBase[Audiobook]):
         :param limit: Maximum number of items to return.
         :param offset: Number of items to skip.
         :param order_by: Order by field (e.g. 'sort_name', 'timestamp_added').
-        :param provider: Filter by provider instance ID or domain (single string or list).
+        :param provider: Filter by provider instance ID (single string or list).
         :param extra_query: Additional SQL query string.
         :param extra_query_params: Additional query parameters.
         """
index 6c07919a2d53486a5ad60b494db3ea8973afb911..76b6dce7f4a4faf46f30812e26b4b202c1a0973f 100644 (file)
@@ -850,10 +850,7 @@ class MediaControllerBase[ItemCls: "MediaItemType"](metaclass=ABCMeta):
         if provider_filter:
             provider_conditions = []
             for prov in provider_filter:
-                provider_conditions.append(
-                    f"provider_mappings.provider_instance = '{prov}' "
-                    f"OR provider_mappings.provider_domain = '{prov}'"
-                )
+                provider_conditions.append(f"provider_mappings.provider_instance = '{prov}'")
             join_parts.append(
                 f"JOIN provider_mappings ON provider_mappings.item_id = {self.db_table}.item_id "
                 f"AND provider_mappings.media_type = '{self.media_type.value}' "
index 7e95202746efa75d650bcc9c4e19ada50946c83f..ce6fbea5a5ffcfad398bba4c9bd8256fba477358 100644 (file)
@@ -60,7 +60,7 @@ class PodcastsController(MediaControllerBase[Podcast]):
         :param limit: Maximum number of items to return.
         :param offset: Number of items to skip.
         :param order_by: Order by field (e.g. 'sort_name', 'timestamp_added').
-        :param provider: Filter by provider instance ID or domain (single string or list).
+        :param provider: Filter by provider instance ID (single string or list).
         :param extra_query: Additional SQL query string.
         :param extra_query_params: Additional query parameters.
         """
index 1872e8a3baddf99619a4df42800a2d1123643a8e..7af2e34f984e41d26fc3b696a8b1df11e372ffd8 100644 (file)
@@ -175,7 +175,7 @@ class TracksController(MediaControllerBase[Track]):
         :param limit: Maximum number of items to return.
         :param offset: Number of items to skip.
         :param order_by: Order by field (e.g. 'sort_name', 'timestamp_added').
-        :param provider: Filter by provider instance ID or domain (single string or list).
+        :param provider: Filter by provider instance ID (single string or list).
         :param extra_query: Additional SQL query string.
         :param extra_query_params: Additional query parameters.
         """
index a26430e585a5842a26b769d2e5f422ff69595945..8078711ad203041f2e2dfc8acb93e9976f26349a 100644 (file)
@@ -1521,6 +1521,12 @@ class MusicController(CoreController):
             for prov_instance in provider_instances:
                 if prov_instance.instance_id == provider.instance_id:
                     continue
+                if any(
+                    pm.provider_instance == prov_instance.instance_id
+                    for pm in item.provider_mappings
+                ):
+                    # mapping already exists
+                    continue
                 # create additional mapping for other provider instances of the same provider
                 item.provider_mappings.add(
                     ProviderMapping(
@@ -1532,7 +1538,7 @@ class MusicController(CoreController):
                         audio_format=provider_mapping.audio_format,
                         url=provider_mapping.url,
                         details=provider_mapping.details,
-                        in_library=provider_mapping.in_library,
+                        in_library=None,
                     )
                 )