Added the ability to download files in parallel using a ThreadPoolExecutor, which can speed up the download process. Improved handling of existing files - if a local file exists, it now checks if the file size matches the remote file before deciding to skip or redownload. Changed the error handling to provide more informative error messages. Added a default of 4 threads for parallel downloads, but you can adjust this value as needed.
Added the ability to download files in parallel using a ThreadPoolExecutor, which can speed up the download process. Improved handling of existing files - if a local file exists, it now checks if the file size matches the remote file before deciding to skip or redownload. Changed the error handling to provide more informative error messages. Added a default of 4 threads for parallel downloads, but you can adjust this value as needed.