Soundcloud guard (#602)
authorGiel Janssens <gieljnssns@me.com>
Sat, 1 Apr 2023 21:20:21 +0000 (23:20 +0200)
committerGitHub <noreply@github.com>
Sat, 1 Apr 2023 21:20:21 +0000 (23:20 +0200)
* "fix" Soundcloud not starting

* Add guard in get_library_playlists and add timings

* Update music_assistant/server/providers/soundcloud/__init__.py

---------

Co-authored-by: Marcel van der Veldt <m.vanderveldt@outlook.com>
music_assistant/server/providers/soundcloud/__init__.py

index c2e74ae26f8a8edee470ce6b2fcc32171b2e7f79..36f8123be0ee1c069ad261ed87b9b4f0473adaf6 100644 (file)
@@ -2,6 +2,7 @@
 from __future__ import annotations
 
 import asyncio
+import time
 from collections.abc import AsyncGenerator, Callable
 from typing import TYPE_CHECKING
 
@@ -122,8 +123,15 @@ class SoundcloudMusicProvider(MusicProvider):
         if MediaType.PLAYLIST in media_types:
             searchtypes.append("playlist")
 
+        time_start = time.time()
+
         searchresult = await self._soundcloud.search(search_query, limit)
 
+        self.logger.debug(
+            "Processing Soundcloud search took %s seconds",
+            round(time.time() - time_start, 2),
+        )
+
         for item in searchresult["collection"]:
             media_type = item["kind"]
             if media_type == "user":
@@ -132,11 +140,18 @@ class SoundcloudMusicProvider(MusicProvider):
                 result.tracks.append(await self._parse_track(item))
             elif media_type == "playlist":
                 result.playlists.append(await self._parse_playlist(item))
+
         return result
 
     async def get_library_artists(self) -> AsyncGenerator[Artist, None]:
         """Retrieve all library artists from Soundcloud."""
+        time_start = time.time()
+
         following = await self._soundcloud.get_following(self._user_id)
+        self.logger.debug(
+            "Processing Soundcloud library artists took %s seconds",
+            round(time.time() - time_start, 2),
+        )
         for artist in following["collection"]:
             try:
                 yield await self._parse_artist(artist)
@@ -146,11 +161,17 @@ class SoundcloudMusicProvider(MusicProvider):
 
     async def get_library_playlists(self) -> AsyncGenerator[Playlist, None]:
         """Retrieve all library playlists from Soundcloud."""
+        time_start = time.time()
         playlists = await self._soundcloud.get_account_playlists()
+        self.logger.debug(
+            "Processing Soundcloud library playlists took %s seconds",
+            round(time.time() - time_start, 2),
+        )
         for item in playlists["collection"]:
-            playlist_id = item["playlist"]["id"]
-            playlist_obj = await self._soundcloud.get_playlist_details(playlist_id=playlist_id)
             try:
+                playlist_obj = await self._soundcloud.get_playlist_details(
+                    playlist_id=item["playlist"]["id"]
+                )
                 yield await self._parse_playlist(playlist_obj)
             except (KeyError, TypeError, InvalidDataError, IndexError) as error:
                 self.logger.debug("Parse playlist failed: %s", playlist_obj, exc_info=error)
@@ -158,7 +179,12 @@ class SoundcloudMusicProvider(MusicProvider):
 
     async def get_library_tracks(self) -> AsyncGenerator[Track, None]:
         """Retrieve library tracks from Soundcloud."""
+        time_start = time.time()
         tracks = await self._soundcloud.get_tracks_liked()
+        self.logger.debug(
+            "Processing Soundcloud library tracks took %s seconds",
+            round(time.time() - time_start, 2),
+        )
         for item in tracks["collection"]:
             track = await self._soundcloud.get_track_details(item)
             try: