From: Marvin Schenkel Date: Fri, 8 Jul 2022 18:50:26 +0000 (+0200) Subject: Fix parsing bugs X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=c7a72430967db747be3c340fb9b0b04a19aec0a7;p=music-assistant-server.git Fix parsing bugs --- diff --git a/music_assistant/music_providers/ytmusic/helpers.py b/music_assistant/music_providers/ytmusic/helpers.py index cb559ce7..97a44786 100644 --- a/music_assistant/music_providers/ytmusic/helpers.py +++ b/music_assistant/music_providers/ytmusic/helpers.py @@ -19,7 +19,12 @@ async def get_artist(prov_artist_id: str) -> Dict[str, str]: def _get_artist(): ytm = ytmusicapi.YTMusic() - return ytm.get_artist(channelId=prov_artist_id) + try: + artist = ytm.get_artist(channelId=prov_artist_id) + except KeyError: + user = ytm.get_user(channelId=prov_artist_id) + artist = {"channelId": prov_artist_id, "name": user["name"]} + return artist loop = asyncio.get_running_loop() return await loop.run_in_executor(None, _get_artist) diff --git a/music_assistant/music_providers/ytmusic/ytmusic.py b/music_assistant/music_providers/ytmusic/ytmusic.py index ece93b20..f303d34f 100644 --- a/music_assistant/music_providers/ytmusic/ytmusic.py +++ b/music_assistant/music_providers/ytmusic/ytmusic.py @@ -104,7 +104,16 @@ class YoutubeMusicProvider(MusicProvider): elif result["resultType"] == "playlist": parsed_results.append(await self._parse_playlist(result)) elif result["resultType"] == "song": - parsed_results.append(await self._parse_track(result)) + # Tracks from search results sometimes do not have a valid artist id + # In that case, call the API for track details based on track id + try: + track = await self._parse_track(result) + if track: + parsed_results.append(track) + except InvalidDataError: + track = await self.get_track(result["videoId"]) + if track: + parsed_results.append(track) return parsed_results async def get_library_artists(self) -> AsyncGenerator[Artist, None]: @@ -366,8 +375,6 @@ class YoutubeMusicProvider(MusicProvider): playlist.metadata.images = await self._parse_thumbnails( playlist_obj["thumbnails"] ) - if "author" in playlist_obj: - playlist.owner = playlist_obj["author"] playlist.add_provider_id( MediaItemProviderId( item_id=playlist_obj["id"], prov_type=self.type, prov_id=self.id @@ -413,8 +420,6 @@ class YoutubeMusicProvider(MusicProvider): available=available, ) ) - if not track.item_id: - print("what?") return track async def _get_signature_timestamp(self):