From b4d6e46057b1f24a20d453df0f714512e932ec12 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 28 May 2012 21:16:53 +0530 Subject: [PATCH] When bulk downloading metadata and the user deletes one of the books for which metadata is being downloaded, just ignore it, instead of erroring out --- src/calibre/gui2/actions/edit_metadata.py | 25 ++++++++++++----------- src/calibre/library/database2.py | 3 +++ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/calibre/gui2/actions/edit_metadata.py b/src/calibre/gui2/actions/edit_metadata.py index 21cba758e8..c2558d56ae 100644 --- a/src/calibre/gui2/actions/edit_metadata.py +++ b/src/calibre/gui2/actions/edit_metadata.py @@ -132,7 +132,7 @@ class EditMetadataAction(InterfaceAction): for i in good_ids: lm = db.metadata_last_modified(i, index_is_id=True) - if lm > lm_map[i]: + if lm is not None and lm_map[i] is not None and lm > lm_map[i]: title = db.title(i, index_is_id=True) authors = db.authors(i, index_is_id=True) if authors: @@ -516,18 +516,19 @@ class EditMetadataAction(InterfaceAction): return self.finalize_apply() i, mi = self.apply_id_map[self.apply_current_idx] - if isinstance(mi, tuple): - opf, cover = mi - if opf: - mi = OPF(open(opf, 'rb'), basedir=os.path.dirname(opf), - populate_spine=False).to_book_metadata() + if self.gui.current_db.has_id(i): + if isinstance(mi, tuple): + opf, cover = mi + if opf: + mi = OPF(open(opf, 'rb'), basedir=os.path.dirname(opf), + populate_spine=False).to_book_metadata() + self.apply_mi(i, mi) + if cover: + self.gui.current_db.set_cover(i, open(cover, 'rb'), + notify=False, commit=False) + self.applied_ids.add(i) + else: self.apply_mi(i, mi) - if cover: - self.gui.current_db.set_cover(i, open(cover, 'rb'), - notify=False, commit=False) - self.applied_ids.add(i) - else: - self.apply_mi(i, mi) self.apply_current_idx += 1 if self.apply_pd is not None: diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 1dc0ce45ed..230acf8891 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -1023,6 +1023,9 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): return bool(self.conn.get('SELECT id FROM books where title=?', (title,), all=False)) return False + def has_id(self, id_): + return self.data._data[id_] is not None + def books_with_same_title(self, mi, all_matches=True): title = mi.title ans = set()