From be977db0d94ba1e4c3146fc65a4c939a62d98069 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 5 Mar 2013 09:51:36 +0530 Subject: [PATCH] Fix updating the calibre application id in EPUBs that also use the application id as the package id. --- src/calibre/ebooks/metadata/opf2.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index 1950ee4621..b36d2363d3 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -941,9 +941,19 @@ class OPF(object): # {{{ return self.get_text(match) or None def fset(self, val): + removed_ids = set() for x in tuple(self.application_id_path(self.metadata)): + removed_ids.add(x.get('id', None)) x.getparent().remove(x) + + uuid_id = None + for attr in self.root.attrib: + if attr.endswith('unique-identifier'): + uuid_id = self.root.attrib[attr] + break attrib = {'{%s}scheme'%self.NAMESPACES['opf']: 'calibre'} + if uuid_id and uuid_id in removed_ids: + attrib['id'] = uuid_id self.set_text(self.create_metadata_element( 'identifier', attrib=attrib), unicode(val))