Skip to content

Commit

Permalink
Download lyrics with save operation (#2206)
Browse files Browse the repository at this point in the history
  • Loading branch information
SilentDude authored Oct 12, 2024
1 parent e462456 commit 15ab489
Showing 1 changed file with 29 additions and 14 deletions.
43 changes: 29 additions & 14 deletions spotdl/console/save.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,20 +51,36 @@ def save(
save_data = [song.json for song in songs]

def process_song(song: Song):
try:
data = downloader.search(song)
if data is None:
logger.error("Could not find a match for %s", song.display_name)

download_url = None
if downloader.settings["preload"]:
try:
download_url = downloader.search(song)
if download_url is None:
logger.error("Could not find a match for %s", song.display_name)
return None

logger.info("Found url for %s: %s", song.display_name, download_url)
except Exception as exception:
logger.error(
"%s generated an exception: %s", song.display_name, exception
)
return None

logger.info("Found url for %s: %s", song.display_name, data)

return {**song.json, "download_url": data}
lyrics = None
try:
lyrics = downloader.search_lyrics(song)
if lyrics is None:
logger.debug(
"No lyrics found for %s, lyrics providers: %s",
song.display_name,
", ".join(
[lprovider.name for lprovider in downloader.lyrics_providers]
),
)
except Exception as exception:
logger.error("%s generated an exception: %s", song.display_name, exception)
logger.debug("Could not search for lyrics: %s", exception)

return None
return {**song.json, "download_url": download_url, "lyrics": lyrics}

async def pool_worker(song: Song):
async with downloader.semaphore:
Expand All @@ -74,11 +90,10 @@ async def pool_worker(song: Song):
# hurt performance.
return await downloader.loop.run_in_executor(None, process_song, song)

if downloader.settings["preload"]:
tasks = [pool_worker(song) for song in songs]
tasks = [pool_worker(song) for song in songs]

# call all task asynchronously, and wait until all are finished
save_data = list(downloader.loop.run_until_complete(asyncio.gather(*tasks)))
# call all task asynchronously, and wait until all are finished
save_data = list(downloader.loop.run_until_complete(asyncio.gather(*tasks)))

if to_stdout:
# Print the songs to stdout
Expand Down

0 comments on commit 15ab489

Please sign in to comment.