From 7e56edf946f57b86740a8c5350f09828592abcff Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 21 May 2010 22:31:38 -0600 Subject: [PATCH] EPUB metadata: When setting authors, always move the new dc:creator element to the top so broken implementations don't get confused and make their anonymous creators look like fools --- src/calibre/ebooks/metadata/opf2.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index e429574e57..2f61b5b8fe 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -669,10 +669,19 @@ class OPF(object): remove = list(self.authors_path(self.metadata)) for elem in remove: elem.getparent().remove(elem) + elems = [] for author in val: attrib = {'{%s}role'%self.NAMESPACES['opf']: 'aut'} elem = self.create_metadata_element('creator', attrib=attrib) self.set_text(elem, author.strip()) + # Ensure new author element is at the top of the list + # for broken implementations that always use the first + # element with no attention to the role + elems.append(elem) + for elem in reversed(elems): + parent = elem.getparent() + parent.remove(elem) + parent.insert(0, elem) return property(fget=fget, fset=fset)