From f013d5e37139b99633ccc31020a057dc939faa5f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 1 May 2013 21:44:32 +0530 Subject: [PATCH] When reading metadata from EPUB 3 files, use the first element rather than the last. Fixes #1175184 (EPUB3 multiple titles not handled correctly) --- src/calibre/ebooks/metadata/opf2.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index 0f500c7502..f38a18989c 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -554,6 +554,10 @@ class OPF(object): # {{{ resolve_entities=True, assume_utf8=True) raw = raw[raw.find('<'):] self.root = etree.fromstring(raw, self.PARSER) + try: + self.package_version = float(self.root.get('version', None)) + except (AttributeError, TypeError, ValueError): + self.package_version = 0 self.metadata = self.metadata_path(self.root) if not self.metadata: raise ValueError('Malformed OPF file: No element') @@ -1116,7 +1120,10 @@ class OPF(object): # {{{ def get_metadata_element(self, name): matches = self.metadata_elem_path(self.metadata, name=name) if matches: - return matches[-1] + num = -1 + if self.package_version >= 3 and name == 'title': + num = 0 + return matches[num] def create_metadata_element(self, name, attrib=None, is_dc=True): if is_dc: