From 51c89599822ceeeae395b23f767806f4e9ff915e Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Mon, 8 Dec 2025 11:40:04 +0100 Subject: [PATCH] Fix library provider filter and subinstance match --- music_assistant/controllers/media/albums.py | 2 +- music_assistant/controllers/media/artists.py | 2 +- music_assistant/controllers/media/audiobooks.py | 2 +- music_assistant/controllers/media/base.py | 5 +---- music_assistant/controllers/media/podcasts.py | 2 +- music_assistant/controllers/media/tracks.py | 2 +- music_assistant/controllers/music.py | 8 +++++++- 7 files changed, 13 insertions(+), 10 deletions(-) diff --git a/music_assistant/controllers/media/albums.py b/music_assistant/controllers/media/albums.py index 205e2b36..ad0ea26b 100644 --- a/music_assistant/controllers/media/albums.py +++ b/music_assistant/controllers/media/albums.py @@ -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. diff --git a/music_assistant/controllers/media/artists.py b/music_assistant/controllers/media/artists.py index 9a362101..e9a41d11 100644 --- a/music_assistant/controllers/media/artists.py +++ b/music_assistant/controllers/media/artists.py @@ -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. diff --git a/music_assistant/controllers/media/audiobooks.py b/music_assistant/controllers/media/audiobooks.py index 20bf2dfd..aa0c9403 100644 --- a/music_assistant/controllers/media/audiobooks.py +++ b/music_assistant/controllers/media/audiobooks.py @@ -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. """ diff --git a/music_assistant/controllers/media/base.py b/music_assistant/controllers/media/base.py index 6c07919a..76b6dce7 100644 --- a/music_assistant/controllers/media/base.py +++ b/music_assistant/controllers/media/base.py @@ -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}' " diff --git a/music_assistant/controllers/media/podcasts.py b/music_assistant/controllers/media/podcasts.py index 7e952027..ce6fbea5 100644 --- a/music_assistant/controllers/media/podcasts.py +++ b/music_assistant/controllers/media/podcasts.py @@ -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. """ diff --git a/music_assistant/controllers/media/tracks.py b/music_assistant/controllers/media/tracks.py index 1872e8a3..7af2e34f 100644 --- a/music_assistant/controllers/media/tracks.py +++ b/music_assistant/controllers/media/tracks.py @@ -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. """ diff --git a/music_assistant/controllers/music.py b/music_assistant/controllers/music.py index a26430e5..8078711a 100644 --- a/music_assistant/controllers/music.py +++ b/music_assistant/controllers/music.py @@ -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, ) ) -- 2.34.1