From 177111e8a54ed883adb7b76ab3a52dd250d4ce8e Mon Sep 17 00:00:00 2001 From: Giel Janssens Date: Sat, 1 Apr 2023 23:20:21 +0200 Subject: [PATCH] Soundcloud guard (#602) * "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 --- .../server/providers/soundcloud/__init__.py | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/music_assistant/server/providers/soundcloud/__init__.py b/music_assistant/server/providers/soundcloud/__init__.py index c2e74ae2..36f8123b 100644 --- a/music_assistant/server/providers/soundcloud/__init__.py +++ b/music_assistant/server/providers/soundcloud/__init__.py @@ -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: -- 2.34.1