From d439798750ff3da8e56f027c38a4f9cc9553c656 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 8 Feb 2009 17:35:39 -0800 Subject: [PATCH] IGN:Fix minor bugs in setting metadata for MOBI and EPUB --- src/calibre/customize/ui.py | 1 + src/calibre/ebooks/metadata/mobi.py | 4 +++- src/calibre/ebooks/metadata/opf2.py | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/calibre/customize/ui.py b/src/calibre/customize/ui.py index c79b4ed98e..7374eaba11 100644 --- a/src/calibre/customize/ui.py +++ b/src/calibre/customize/ui.py @@ -141,6 +141,7 @@ def set_file_type_metadata(stream, mi, ftype): plugin.set_metadata(stream, mi, ftype.lower().strip()) break except: + print 'Failed to set metadata for', repr(getattr(mi, 'title', '')) traceback.print_exc() diff --git a/src/calibre/ebooks/metadata/mobi.py b/src/calibre/ebooks/metadata/mobi.py index 815b293c42..b464b6553f 100644 --- a/src/calibre/ebooks/metadata/mobi.py +++ b/src/calibre/ebooks/metadata/mobi.py @@ -86,9 +86,9 @@ class MetadataUpdater(object): image_base, = unpack('>I', record0[108:112]) flags, = unpack('>I', record0[128:132]) have_exth = self.have_exth = (flags & 0x40) != 0 + self.cover_record = self.thumbnail_record = None if not have_exth: return - self.cover_record = self.thumbnail_record = None exth_off = unpack('>I', record0[20:24])[0] + 16 + record0.start exth = self.exth = StreamSlicer(stream, exth_off, record0.stop) nitems, = unpack('>I', exth[8:12]) @@ -143,6 +143,8 @@ class MetadataUpdater(object): exth = ['EXTH', pack('>II', len(exth) + 12, len(recs)), exth, pad] exth = ''.join(exth) title = (mi.title or _('Unknown')).encode(self.codec, 'replace') + if getattr(self, 'exth', None) is None: + raise MobiError('No existing EXTH record. Cannot update metadata.') title_off = (self.exth.start - self.record0.start) + len(exth) title_len = len(title) trail = len(self.exth) - len(exth) - len(title) diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index 2e6fe598ec..32ba2cb45a 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -618,7 +618,7 @@ class OPF(object): def fset(self, val): remove = list(self.authors_path(self.metadata)) for elem in remove: - self.metadata.remove(elem) + elem.getparent().remove(elem) for author in val: attrib = {'{%s}role'%self.NAMESPACES['opf']: 'aut'} elem = self.create_metadata_element('creator', attrib=attrib)