From 464979673a45a811d9293ee542b60bbdd29b52a1 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 17 Jul 2016 09:26:13 +0530 Subject: [PATCH] E-book viewer: Fix the show metadata button not reading EPUB 3 metadata --- src/calibre/ebooks/metadata/opf2.py | 3 +++ src/calibre/ebooks/oeb/iterator/book.py | 7 ++++--- src/calibre/gui2/viewer/main.py | 5 ++--- src/calibre/gui2/viewer/ui.py | 3 +-- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index 3d8be41064..fa45b516a4 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -620,6 +620,9 @@ class OPF(object): # {{{ self._user_metadata_ = temp.get_all_user_metadata(True) def to_book_metadata(self): + if self.package_version >= 3.0: + from calibre.ebooks.metadata.opf3 import read_metadata + return read_metadata(self.root) ans = MetaInformation(self) for n, v in self._user_metadata_.items(): ans.set_user_metadata(n, v) diff --git a/src/calibre/ebooks/oeb/iterator/book.py b/src/calibre/ebooks/oeb/iterator/book.py index 437d1aaa93..47ac05536c 100644 --- a/src/calibre/ebooks/oeb/iterator/book.py +++ b/src/calibre/ebooks/oeb/iterator/book.py @@ -139,9 +139,10 @@ class EbookIterator(BookmarksMixin): self.book_format, self.pathtoopf, input_fmt = run_extract_book( self.pathtoebook, self.base, only_input_plugin=only_input_plugin, view_kepub=view_kepub, processed=processed) self.opf = OPF(self.pathtoopf, os.path.dirname(self.pathtoopf)) - self.language = self.opf.language - if self.language: - self.language = self.language.lower() + self.mi = self.opf.to_book_metadata() + self.language = None + if self.mi.languages: + self.language = self.mi.languages[0].lower() ordered = [i for i in self.opf.spine if i.is_linear] + \ [i for i in self.opf.spine if not i.is_linear] self.spine = [] diff --git a/src/calibre/gui2/viewer/main.py b/src/calibre/gui2/viewer/main.py index 2c62aa8e3f..d9756934cf 100644 --- a/src/calibre/gui2/viewer/main.py +++ b/src/calibre/gui2/viewer/main.py @@ -953,10 +953,9 @@ class EbookViewer(MainWindow): det_msg=tb, show=True) self.close_progress_indicator() else: - self.metadata.show_opf(self.iterator.opf, - self.iterator.book_format) + self.metadata.show_metadata(self.iterator.mi, self.iterator.book_format) self.view.current_language = self.iterator.language - title = self.iterator.opf.title + title = self.iterator.mi.title if not title: title = os.path.splitext(os.path.basename(pathtoebook))[0] if self.iterator.toc: diff --git a/src/calibre/gui2/viewer/ui.py b/src/calibre/gui2/viewer/ui.py index 4a0d11e997..ef0c99d8b2 100644 --- a/src/calibre/gui2/viewer/ui.py +++ b/src/calibre/gui2/viewer/ui.py @@ -80,14 +80,13 @@ class Metadata(QWebView): # {{{ def update_layout(self): self.setGeometry(0, 0, self.parent().width(), self.parent().height()) - def show_opf(self, opf, ext=''): + def show_metadata(self, mi, ext=''): from calibre.gui2.book_details import render_html, css from calibre.ebooks.metadata.book.render import mi_to_html def render_data(mi, use_roman_numbers=True, all_fields=False): return mi_to_html(mi, use_roman_numbers=use_roman_numbers, rating_font=rating_font(), rtl=is_rtl()) - mi = opf.to_book_metadata() html = render_html(mi, css(), True, self, render_data_func=render_data) self.setHtml(html)