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
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
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
)