From: Marcel van der Veldt Date: Wed, 21 Aug 2024 08:45:32 +0000 (+0200) Subject: fix library remove when YTM present X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=79bd0116e2e7061484052182b2f48060acefce0b;p=music-assistant-server.git fix library remove when YTM present --- diff --git a/music_assistant/server/controllers/music.py b/music_assistant/server/controllers/music.py index a56918ee..01cdc06c 100644 --- a/music_assistant/server/controllers/music.py +++ b/music_assistant/server/controllers/music.py @@ -538,6 +538,9 @@ class MusicController(CoreController): # remove from all providers for provider_mapping in item.provider_mappings: if prov_controller := self.mass.get_provider(provider_mapping.provider_instance): + # we simply try to remove it on the provider library + # NOTE that the item may not be in the provider's library at all + # so we need to be a bit forgiving here with suppress(NotImplementedError): await prov_controller.library_remove(provider_mapping.item_id, item.media_type) await ctrl.remove_item_from_library(library_item_id) diff --git a/music_assistant/server/providers/ytmusic/__init__.py b/music_assistant/server/providers/ytmusic/__init__.py index 030d37bb..34f1f0f8 100644 --- a/music_assistant/server/providers/ytmusic/__init__.py +++ b/music_assistant/server/providers/ytmusic/__init__.py @@ -11,6 +11,7 @@ from urllib.parse import unquote import yt_dlp from ytmusicapi.constants import SUPPORTED_LANGUAGES +from ytmusicapi.exceptions import YTMusicServerError from music_assistant.common.models.config_entries import ConfigEntry, ConfigValueType from music_assistant.common.models.enums import ConfigEntryType, ProviderFeature, StreamType @@ -433,20 +434,24 @@ class YoutubeMusicProvider(MusicProvider): """Remove an item from the library.""" await self._check_oauth_token() result = False - if media_type == MediaType.ARTIST: - result = await library_add_remove_artist( - headers=self._headers, prov_artist_id=prov_item_id, add=False - ) - elif media_type == MediaType.ALBUM: - result = await library_add_remove_album( - headers=self._headers, prov_item_id=prov_item_id, add=False - ) - elif media_type == MediaType.PLAYLIST: - result = await library_add_remove_playlist( - headers=self._headers, prov_item_id=prov_item_id, add=False - ) - elif media_type == MediaType.TRACK: - raise NotImplementedError + try: + if media_type == MediaType.ARTIST: + result = await library_add_remove_artist( + headers=self._headers, prov_artist_id=prov_item_id, add=False + ) + elif media_type == MediaType.ALBUM: + result = await library_add_remove_album( + headers=self._headers, prov_item_id=prov_item_id, add=False + ) + elif media_type == MediaType.PLAYLIST: + result = await library_add_remove_playlist( + headers=self._headers, prov_item_id=prov_item_id, add=False + ) + elif media_type == MediaType.TRACK: + raise NotImplementedError + except YTMusicServerError as err: + # YTM raises if trying to remove an item that is not in the library + raise NotImplementedError(err) from err return result async def add_playlist_tracks(self, prov_playlist_id: str, prov_track_ids: list[str]) -> None: