From 1d74d7cc93440ddf84ba0c3728e79cb0f2b6c66c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 18 Aug 2011 11:26:05 -0600 Subject: [PATCH] When bulk downloading metadata for more than 100 books ata time, automatically split up the download into batches of 100. Fixes #828373 (Split Bulk Metadata download job into smaller jobs) --- src/calibre/gui2/metadata/bulk_download.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/calibre/gui2/metadata/bulk_download.py b/src/calibre/gui2/metadata/bulk_download.py index f8c07924f4..ad7018401b 100644 --- a/src/calibre/gui2/metadata/bulk_download.py +++ b/src/calibre/gui2/metadata/bulk_download.py @@ -89,6 +89,15 @@ class ConfirmDialog(QDialog): self.identify = False self.accept() +def split_jobs(ids, batch_size=100): + ans = [] + ids = list(ids) + while ids: + jids = ids[:batch_size] + ans.append(jids) + ids = ids[batch_size:] + return ans + def start_download(gui, ids, callback): d = ConfirmDialog(ids, gui) ret = d.exec_() @@ -96,11 +105,13 @@ def start_download(gui, ids, callback): if ret != d.Accepted: return - job = ThreadedJob('metadata bulk download', - _('Download metadata for %d books')%len(ids), - download, (ids, gui.current_db, d.identify, d.covers), {}, callback) - gui.job_manager.run_threaded_job(job) + for batch in split_jobs(ids): + job = ThreadedJob('metadata bulk download', + _('Download metadata for %d books')%len(batch), + download, (batch, gui.current_db, d.identify, d.covers), {}, callback) + gui.job_manager.run_threaded_job(job) gui.status_bar.show_message(_('Metadata download started'), 3000) + # }}} def get_job_details(job):