From e0a5fef214940f8351b0b36e4c5e25b928e5e724 Mon Sep 17 00:00:00 2001 From: Rafael Moraes <50295204+glomatico@users.noreply.github.com> Date: Sat, 21 Sep 2024 16:11:43 -0300 Subject: [PATCH] check `has_lyrics` before fetching lyrics --- votify/cli.py | 13 ++++++++----- votify/downloader.py | 23 ++++++++++++++--------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/votify/cli.py b/votify/cli.py index 5ac87c6..4f31a5d 100644 --- a/votify/cli.py +++ b/votify/cli.py @@ -15,6 +15,7 @@ from .downloader import Downloader from .downloader_episode import DownloaderEpisode from .downloader_song import DownloaderSong from .enums import DownloadMode, Quality +from .models import Lyrics from .spotify_api import SpotifyApi spotify_api_sig = inspect.signature(SpotifyApi.__init__) @@ -361,9 +362,8 @@ def main( media_id = downloader.get_media_id(media_metadata) media_type = media_metadata["type"] logger.debug("Getting stream info") - stream_info = downloader.get_stream_info( - **{f"{media_type}_id": media_id}, - ) + gid_metadata = downloader.get_gid_metadata(media_id, media_type) + stream_info = downloader.get_stream_info(gid_metadata, media_type) if not stream_info.file_id: logger.warning( f"({queue_progress}) Media is not available on Spotify's " @@ -377,8 +377,11 @@ def main( logger.debug("Getting decryption key") decryption_key = downloader.get_decryption_key(stream_info.file_id) if media_type == "track": - logger.debug("Getting lyrics") - lyrics = downloader_song.get_lyrics(media_id) + if gid_metadata.get("has_lyrics"): + logger.debug("Getting lyrics") + lyrics = downloader_song.get_lyrics(media_id) + else: + lyrics = Lyrics() if not download_queue.album_metadata: logger.debug("Getting album metadata") album_metadata = spotify_api.get_album( diff --git a/votify/downloader.py b/votify/downloader.py index c9b8e06..ef1ec52 100644 --- a/votify/downloader.py +++ b/votify/downloader.py @@ -250,21 +250,26 @@ class Downloader: return quality, audio_file return None, None + def get_gid_metadata( + self, + media_id: str, + media_type: str, + ) -> dict: + gid = self.spotify_api.media_id_to_gid(media_id) + return self.spotify_api.get_gid_metadata(gid, media_type) + def get_stream_info( self, - track_id: str = None, - episode_id: str = None, + gid_metadata: dict, + media_type: str, ) -> StreamInfo: - if not track_id and not episode_id: - raise RuntimeError() stream_info = StreamInfo() - gid = self.spotify_api.media_id_to_gid(track_id or episode_id) - if track_id: - gid_metadata = self.spotify_api.get_gid_metadata(gid, "track") + if media_type == "track": audio_files = gid_metadata.get("file") - elif episode_id: - gid_metadata = self.spotify_api.get_gid_metadata(gid, "episode") + elif media_type == "episode": audio_files = gid_metadata.get("audio") + else: + raise RuntimeError() audio_files = audio_files or gid_metadata.get("alternative") if not audio_files: return stream_info