Implement radio mode
authorJonathan Bangert <jonathan@bangert.dk>
Tue, 15 Aug 2023 15:04:42 +0000 (17:04 +0200)
committerJonathan Bangert <jonathan@bangert.dk>
Tue, 15 Aug 2023 15:04:42 +0000 (17:04 +0200)
music_assistant/server/providers/deezer/__init__.py

index a72b357b3aad96b1c04951ce52c1aabefc362945..9928e985af5d889900310bdfe04315ee5cba2a79 100644 (file)
@@ -70,6 +70,7 @@ SUPPORTED_FEATURES = (
     ProviderFeature.PLAYLIST_TRACKS_EDIT,
     ProviderFeature.PLAYLIST_CREATE,
     ProviderFeature.RECOMMENDATIONS,
+    ProviderFeature.SIMILAR_TRACKS,
 )
 
 
@@ -408,6 +409,14 @@ class DeezerProvider(MusicProvider):  # pylint: disable=W0223
         playlist = await self.client.get_playlist(playlist_id)
         return self.parse_playlist(playlist=playlist)
 
+    async def get_similar_tracks(self, prov_track_id, limit=25) -> list[Track]:
+        """Retrieve a dynamic list of tracks based on the provided item."""
+        endpoint = "song.getSearchTrackMix"
+        tracks = (await self.gw_client._gw_api_call(endpoint, args={"SNG_ID": prov_track_id}))[
+            "results"
+        ]["data"][:limit]
+        return [await self.get_track(track["SNG_ID"]) for track in tracks]
+
     async def get_stream_details(self, item_id: str) -> StreamDetails | None:
         """Return the content details for the given track when it will be streamed."""
         url_details, song_data = await self.gw_client.get_deezer_track_urls(item_id)