From fe98bdb42cb20ba9b727e8ce449f9d78f37af9e7 Mon Sep 17 00:00:00 2001 From: Rafael Moraes <50295204+glomatico@users.noreply.github.com> Date: Fri, 24 Apr 2026 11:55:35 -0300 Subject: [PATCH] Process download items inline, remove queue --- gamdl/cli/cli.py | 94 ++++++++++++++++++++++++------------------------ 1 file changed, 46 insertions(+), 48 deletions(-) diff --git a/gamdl/cli/cli.py b/gamdl/cli/cli.py index ce3c573..3cc9dd1 100644 --- a/gamdl/cli/cli.py +++ b/gamdl/cli/cli.py @@ -246,9 +246,52 @@ async def main(config: CliConfig): url_log.info(f'Processing "{url}"') try: - download_queue: list[DownloadItem] = [] - async for media in downloader.get_download_item_from_url(url): - download_queue.append(media) + async for download_item in downloader.get_download_item_from_url(url): + media_index = download_item.media.index + 1 or "-" + media_total = download_item.media.total or "-" + + track_log = logger.bind( + action=f"Track {media_index:>3}/{media_total:<3}" + ) + + media_title = ( + download_item.media.media_metadata["attributes"]["name"] + if download_item.media.media_metadata + and download_item.media.media_metadata.get("attributes", {}).get( + "name" + ) + else "Unknown Title" + ) + + track_log.info(f'Downloading "{media_title}"') + + try: + await downloader.download(download_item) + except ( + GamdlInterfaceMediaNotStreamableError, + GamdlInterfaceFormatNotAvailableError, + GamdlInterfaceDecryptionNotAvailableError, + GamdlInterfaceArtistMediaTypeError, + GamdlDownloaderSyncedLyricsOnlyError, + GamdlDownloaderMediaFileExistsError, + GamdlDownloaderDependencyNotFoundError, + GamdlDownloaderFlatFilterExcludedError, + ) as e: + track_log.warning(f'Skipping "{media_title}": {e}') + continue + except Exception as e: + error_count += 1 + track_log.exception(f'Error downloading "{media_title}"') + + if ( + database + and download_item.media.media_metadata + and download_item.final_path + ): + database.add( + download_item.media.media_metadata["id"], + download_item.final_path, + ) except GamdlInterfaceUrlParseError as e: url_log.exception(f"{e}") continue @@ -257,49 +300,4 @@ async def main(config: CliConfig): error_count += 1 continue - for download_index, download_item in enumerate( - download_queue, - 1, - ): - track_log = logger.bind( - action=f"Track {download_index:>3}/{len(download_queue):<3}" - ) - - media_title = ( - download_item.media.media_metadata["attributes"]["name"] - if download_item.media.media_metadata - and download_item.media.media_metadata.get("attributes", {}).get("name") - else "Unknown Title" - ) - - track_log.info(f'Downloading "{media_title}"') - - try: - await downloader.download(download_item) - except ( - GamdlInterfaceMediaNotStreamableError, - GamdlInterfaceFormatNotAvailableError, - GamdlInterfaceDecryptionNotAvailableError, - GamdlInterfaceArtistMediaTypeError, - GamdlDownloaderSyncedLyricsOnlyError, - GamdlDownloaderMediaFileExistsError, - GamdlDownloaderDependencyNotFoundError, - GamdlDownloaderFlatFilterExcludedError, - ) as e: - track_log.warning(f'Skipping "{media_title}": {e}') - continue - except Exception as e: - error_count += 1 - track_log.exception(f'Error downloading "{media_title}"') - - if ( - database - and download_item.media.media_metadata - and download_item.final_path - ): - database.add( - download_item.media.media_metadata["id"], - download_item.final_path, - ) - logger.info(f"Finished with {error_count} error(s)")