1616from yt_dlp .postprocessor .sponsorblock import SponsorBlockPP
1717from yt_dlp .postprocessor .modify_chapters import ModifyChaptersPP
1818
19- from spotdl .types import Song , SongList
19+ from spotdl .types import Song
2020from spotdl .utils .ffmpeg import FFmpegError , convert , get_ffmpeg_path
2121from spotdl .utils .metadata import embed_metadata , MetadataError , get_song_metadata
2222from spotdl .utils .formatter import create_file_name , restrict_filename
2626from spotdl .providers .audio import YouTube , YouTubeMusic
2727from spotdl .download .progress_handler import NAME_TO_LEVEL , ProgressHandler
2828from spotdl .utils .config import get_errors_path , get_temp_path
29+ from spotdl .utils .search import reinit_song
2930
3031
3132AUDIO_PROVIDERS : Dict [str , Type [AudioProvider ]] = {
@@ -80,10 +81,10 @@ def __init__(
8081 search_query : Optional [str ] = None ,
8182 log_level : str = "INFO" ,
8283 simple_tui : bool = False ,
83- loop : Optional [asyncio .AbstractEventLoop ] = None ,
8484 restrict : bool = False ,
8585 print_errors : bool = False ,
8686 sponsor_block : bool = False ,
87+ loop : Optional [asyncio .AbstractEventLoop ] = None ,
8788 ):
8889 """
8990 Initialize the Downloader class.
@@ -299,15 +300,15 @@ def search(self, song: Song) -> Tuple[str, AudioProvider]:
299300
300301 raise LookupError (f"No results found for song: { song .display_name } " )
301302
302- def search_lyrics (self , song : Song ) -> str :
303+ def search_lyrics (self , song : Song ) -> Optional [ str ] :
303304 """
304305 Search for lyrics using all available providers.
305306
306307 ### Arguments
307308 - song: The song to search for.
308309
309310 ### Returns
310- - lyrics if successful.
311+ - lyrics if successful else None .
311312 """
312313
313314 for lyrics_provider in self .lyrics_providers :
@@ -323,7 +324,7 @@ def search_lyrics(self, song: Song) -> str:
323324 f"for { song .display_name } "
324325 )
325326
326- raise LookupError ( f"No lyrics found for song: { song . display_name } " )
327+ return None
327328
328329 def search_and_download (self , song : Song ) -> Tuple [Song , Optional [Path ]]:
329330 """
@@ -344,30 +345,19 @@ def search_and_download(self, song: Song) -> Tuple[Song, Optional[Path]]:
344345 # If it's None extract the current metadata
345346 # And reinitialize the song object
346347 if song .name is None and song .url :
347- data = song .json
348- new_data = Song .from_url (data ["url" ]).json
349- data .update ((k , v ) for k , v in new_data .items () if v is not None )
350-
351- if data .get ("song_list" ):
352- # Reinitialize the correct song list object
353- song_list : Type [SongList ] = song .song_list .__class__ (
354- ** data ["song_list" ]
355- )
356- data ["song_list" ] = song_list
357- data ["list_position" ] = song_list .urls .index (song .url )
358-
359- # Reinitialize the song object
360- song = Song (** data )
348+ song = reinit_song (song )
361349
362350 # Find song lyrics and add them to the song object
363- try :
364- song .lyrics = self .search_lyrics (song )
365- except LookupError :
351+ lyrics = self .search_lyrics (song )
352+ if song .lyrics is None :
366353 self .progress_handler .debug (
367354 f"No lyrics found for { song .display_name } , "
368355 "lyrics providers: "
369356 f"{ ', ' .join ([lprovider .name for lprovider in self .lyrics_providers ])} "
370357 )
358+ else :
359+ song .lyrics = lyrics
360+ self .progress_handler .log (f"No lyrics found for song: { song .display_name } " )
371361
372362 # Create the output file path
373363 output_file = create_file_name (song , self .output , self .output_format )
0 commit comments