From c724ec4f2f99b65c42c92ca179f3b1732e7a2e73 Mon Sep 17 00:00:00 2001 From: Starson17 Date: Sun, 18 Jul 2010 16:23:37 -0400 Subject: [PATCH] Local Update src --- src/calibre/gui2/actions.py | 45 +++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/src/calibre/gui2/actions.py b/src/calibre/gui2/actions.py index 9522083b98..91c85f7876 100644 --- a/src/calibre/gui2/actions.py +++ b/src/calibre/gui2/actions.py @@ -806,11 +806,11 @@ class EditMetadataAction(object): # {{{ for src_id in src_ids: src_mi = db.get_metadata(src_id, index_is_id=True, get_cover=True) if src_mi.comments and orig_dest_comments != src_mi.comments: - if not dest_mi.comments or len(dest_mi.comments) == 0: + if not dest_mi.comments: dest_mi.comments = src_mi.comments else: dest_mi.comments = unicode(dest_mi.comments) + u'\n\n' + unicode(src_mi.comments) - if src_mi.title and src_mi.title and (not dest_mi.title or + if src_mi.title and (not dest_mi.title or dest_mi.title == _('Unknown')): dest_mi.title = src_mi.title if src_mi.title and (not dest_mi.authors or dest_mi.authors[0] == @@ -821,8 +821,7 @@ class EditMetadataAction(object): # {{{ if not dest_mi.tags: dest_mi.tags = src_mi.tags else: - for tag in src_mi.tags: - dest_mi.tags.append(tag) + dest_mi.tags.extend(src_mi.tags) if src_mi.cover and not dest_mi.cover: dest_mi.cover = src_mi.cover if not dest_mi.publisher: @@ -833,6 +832,44 @@ class EditMetadataAction(object): # {{{ dest_mi.series = src_mi.series dest_mi.series_index = src_mi.series_index db.set_metadata(dest_id, dest_mi, ignore_errors=False) + + for key in db.field_metadata: #loop thru all defined fields + if db.field_metadata[key]['is_custom']: + colnum = db.field_metadata[key]['colnum'] + # Get orig_dest_comments before it gets changed + if db.field_metadata[key]['datatype'] == 'comments': + orig_dest_value = db.get_custom(dest_id, num=colnum, index_is_id=True) + for src_id in src_ids: + dest_value = db.get_custom(dest_id, num=colnum, index_is_id=True) + src_value = db.get_custom(src_id, num=colnum, index_is_id=True) + if db.field_metadata[key]['datatype'] == 'comments': + if src_value and src_value != orig_dest_value: + if not dest_value: + db.set_custom(dest_id, src_value, num=colnum) + else: + dest_value = unicode(dest_value) + u'\n\n' + unicode(src_value) + db.set_custom(dest_id, dest_value, num=colnum) + if db.field_metadata[key]['datatype'] in \ + ('bool', 'int', 'float', 'rating', 'datetime') \ + and not dest_value: + db.set_custom(dest_id, src_value, num=colnum) + if db.field_metadata[key]['datatype'] == 'series' \ + and not dest_value: + if src_value: + src_index = db.get_custom_extra(src_id, num=colnum, index_is_id=True) + db.set_custom(dest_id, src_value, num=colnum, extra=src_index) + if db.field_metadata[key]['datatype'] == 'text' \ + and not db.field_metadata[key]['is_multiple'] \ + and not dest_value: + db.set_custom(dest_id, src_value, num=colnum) + if db.field_metadata[key]['datatype'] == 'text' \ + and db.field_metadata[key]['is_multiple']: + if src_value: + if not dest_value: + dest_value = src_value + else: + dest_value.extend(src_value) + db.set_custom(dest_id, dest_value, num=colnum) # }}} def edit_device_collections(self, view, oncard=None):