"""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]:
Playlist,
PlaylistTrack,
ProviderMapping,
- Radio,
SearchResults,
StreamDetails,
Track,
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}")
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:
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