From 6f95edb7a5f451f702af5ab1ca19a0c372386500 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Sat, 5 Aug 2023 20:11:01 +0200 Subject: [PATCH] Some fixes for Playlist tracks (#821) * Only allow tracks in filesystem playlists * fix deezer playlist tracks --- music_assistant/server/providers/deezer/__init__.py | 7 +++++-- music_assistant/server/providers/filesystem_local/base.py | 8 ++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/music_assistant/server/providers/deezer/__init__.py b/music_assistant/server/providers/deezer/__init__.py index b48aa88b..a86e0a86 100644 --- a/music_assistant/server/providers/deezer/__init__.py +++ b/music_assistant/server/providers/deezer/__init__.py @@ -274,8 +274,11 @@ class DeezerProvider(MusicProvider): # pylint: disable=W0223 """Get all tracks in a playlist.""" playlist = await self.client.get_playlist(playlist_id=prov_playlist_id) for count, deezer_track in enumerate(playlist.tracks, start=1): - track = self.parse_track(track=deezer_track, user_country=self.gw_client.user_country) - track.position = count + track = self.parse_track( + track=deezer_track, + user_country=self.gw_client.user_country, + extra_init_kwargs={"position": count}, + ) yield track async def get_artist_albums(self, prov_artist_id: str) -> list[Album]: diff --git a/music_assistant/server/providers/filesystem_local/base.py b/music_assistant/server/providers/filesystem_local/base.py index 7ea812a5..d8962f74 100644 --- a/music_assistant/server/providers/filesystem_local/base.py +++ b/music_assistant/server/providers/filesystem_local/base.py @@ -38,7 +38,6 @@ from music_assistant.common.models.media_items import ( Playlist, PlaylistTrack, ProviderMapping, - Radio, SearchResults, StreamDetails, Track, @@ -450,7 +449,9 @@ class FileSystemProviderBase(MusicProvider): if any(x.provider_instance == self.instance_id for x in track.provider_mappings) ] - async def get_playlist_tracks(self, prov_playlist_id: str) -> AsyncGenerator[Track, None]: + async def get_playlist_tracks( + self, prov_playlist_id: str + ) -> AsyncGenerator[PlaylistTrack, None]: """Get playlist tracks for given playlist id.""" if not await self.exists(prov_playlist_id): raise MediaNotFoundError(f"Playlist path does not exist: {prov_playlist_id}") @@ -480,7 +481,7 @@ class FileSystemProviderBase(MusicProvider): async def _parse_playlist_line( self, line: str, playlist_path: str, position: int - ) -> Track | Radio | None: + ) -> PlaylistTrack | None: """Try to parse a track from a playlist line.""" try: if "://" in line: @@ -488,7 +489,6 @@ class FileSystemProviderBase(MusicProvider): media_item = await self.mass.music.get_item_by_uri(line) if isinstance(media_item, Track): return PlaylistTrack.from_dict({**media_item.to_dict(), "position": position}) - return media_item # if a relative path was given in an upper level from the playlist, # try to resolve it -- 2.34.1