From 641e62632261a4e534cab2168854b64e09800bab Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 9 Jun 2011 14:18:42 -0600 Subject: [PATCH] When downloading metadata in bulk, merge rather than replacing existing tags --- src/calibre/gui2/actions/edit_metadata.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/actions/edit_metadata.py b/src/calibre/gui2/actions/edit_metadata.py index 384bf4c9be..daa9cef01b 100644 --- a/src/calibre/gui2/actions/edit_metadata.py +++ b/src/calibre/gui2/actions/edit_metadata.py @@ -439,7 +439,8 @@ class EditMetadataAction(InterfaceAction): view.reset() # Apply bulk metadata changes {{{ - def apply_metadata_changes(self, id_map, title=None, msg='', callback=None): + def apply_metadata_changes(self, id_map, title=None, msg='', callback=None, + merge_tags=True): ''' Apply the metadata changes in id_map to the database synchronously id_map must be a mapping of ids to Metadata objects. Set any fields you @@ -466,9 +467,9 @@ class EditMetadataAction(InterfaceAction): cancelable=False) self.apply_pd.setModal(True) self.apply_pd.show() + self._am_merge_tags = True self.do_one_apply() - def do_one_apply(self): if self.apply_current_idx >= len(self.apply_id_map): return self.finalize_apply() @@ -484,6 +485,12 @@ class EditMetadataAction(InterfaceAction): mi.identifiers = idents if mi.is_null('series'): mi.series_index = None + if self._am_merge_tags: + old_tags = db.tags(i, index_is_id=True) + if old_tags: + tags = old_tags.split(',') + (mi.tags if mi.tags else + []) + mi.tags = list(set(tags)) db.set_metadata(i, mi, commit=False, set_title=set_title, set_authors=set_authors, notify=False) self.applied_ids.append(i)