From: Marcel van der Veldt Date: Fri, 19 Dec 2025 02:58:12 +0000 (+0100) Subject: Fix global search with in_library active X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=9710f72a465b477ace3debcc0dbb24f0e0cab491;p=music-assistant-server.git Fix global search with in_library active --- diff --git a/music_assistant/controllers/music.py b/music_assistant/controllers/music.py index 6dab3f9b..5b853401 100644 --- a/music_assistant/controllers/music.py +++ b/music_assistant/controllers/music.py @@ -328,7 +328,7 @@ class MusicController(CoreController): # this way we can avoid returning duplicates in the search results all_prov_item_ids = { (item.media_type, prov_mapping.provider_domain, prov_mapping.item_id) - for result in ( + for items in ( library_results.artists, library_results.albums, library_results.tracks, @@ -336,7 +336,7 @@ class MusicController(CoreController): library_results.audiobooks, library_results.podcasts, ) - for item in result + for item in items for prov_mapping in item.provider_mappings } # include results from library + all (unique) music providers @@ -352,52 +352,52 @@ class MusicController(CoreController): for provider_instance in search_providers ], ) - # return result from all providers while keeping index - # so the result is sorted as each provider delivered - result = SearchResults( - artists=[ - item - for sublist in zip_longest(*[x.artists for x in results_per_provider]) - for item in sublist - if item is not None - ][:limit], - albums=[ - item - for sublist in zip_longest(*[x.albums for x in results_per_provider]) - for item in sublist - if item is not None - ][:limit], - tracks=[ - item - for sublist in zip_longest(*[x.tracks for x in results_per_provider]) - for item in sublist - if item is not None - ][:limit], - playlists=[ - item - for sublist in zip_longest(*[x.playlists for x in results_per_provider]) - for item in sublist - if item is not None - ][:limit], - radio=[ - item - for sublist in zip_longest(*[x.radio for x in results_per_provider]) - for item in sublist - if item is not None - ][:limit], - audiobooks=[ - item - for sublist in zip_longest(*[x.audiobooks for x in results_per_provider]) - for item in sublist - if item is not None - ][:limit], - podcasts=[ - item - for sublist in zip_longest(*[x.podcasts for x in results_per_provider]) - for item in sublist - if item is not None - ][:limit], - ) + # return result from all providers while keeping index + # so the result is sorted as each provider delivered + result = SearchResults( + artists=[ + item + for sublist in zip_longest(*[x.artists for x in results_per_provider]) + for item in sublist + if item is not None + ][:limit], + albums=[ + item + for sublist in zip_longest(*[x.albums for x in results_per_provider]) + for item in sublist + if item is not None + ][:limit], + tracks=[ + item + for sublist in zip_longest(*[x.tracks for x in results_per_provider]) + for item in sublist + if item is not None + ][:limit], + playlists=[ + item + for sublist in zip_longest(*[x.playlists for x in results_per_provider]) + for item in sublist + if item is not None + ][:limit], + radio=[ + item + for sublist in zip_longest(*[x.radio for x in results_per_provider]) + for item in sublist + if item is not None + ][:limit], + audiobooks=[ + item + for sublist in zip_longest(*[x.audiobooks for x in results_per_provider]) + for item in sublist + if item is not None + ][:limit], + podcasts=[ + item + for sublist in zip_longest(*[x.podcasts for x in results_per_provider]) + for item in sublist + if item is not None + ][:limit], + ) # the search results should already be sorted by relevance # but we apply one extra round of sorting and that is to put exact name