Some fixes for Playlist tracks (#821)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Sat, 5 Aug 2023 18:11:01 +0000 (20:11 +0200)
committerGitHub <noreply@github.com>
Sat, 5 Aug 2023 18:11:01 +0000 (20:11 +0200)
* Only allow tracks in filesystem playlists

* fix deezer playlist tracks

music_assistant/server/providers/deezer/__init__.py
music_assistant/server/providers/filesystem_local/base.py

index b48aa88ba87eb01bdd72c6ce90349fa3ed1ad6e5..a86e0a8663d7997bd5d28e9c1fe0ff902e258134 100644 (file)
@@ -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]:
index 7ea812a5fc278166af399969747b496ed49da200..d8962f7451501b69d57d7726c73c1891af8e2e7f 100644 (file)
@@ -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