E-book viewer: Fix the show metadata button not reading EPUB 3 metadata

This commit is contained in:
Kovid Goyal 2016-07-17 09:26:13 +05:30
parent 428b7a1135
commit 464979673a
4 changed files with 10 additions and 8 deletions

View File

@ -620,6 +620,9 @@ class OPF(object): # {{{
self._user_metadata_ = temp.get_all_user_metadata(True) self._user_metadata_ = temp.get_all_user_metadata(True)
def to_book_metadata(self): 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) ans = MetaInformation(self)
for n, v in self._user_metadata_.items(): for n, v in self._user_metadata_.items():
ans.set_user_metadata(n, v) ans.set_user_metadata(n, v)

View File

@ -139,9 +139,10 @@ class EbookIterator(BookmarksMixin):
self.book_format, self.pathtoopf, input_fmt = run_extract_book( 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.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.opf = OPF(self.pathtoopf, os.path.dirname(self.pathtoopf))
self.language = self.opf.language self.mi = self.opf.to_book_metadata()
if self.language: self.language = None
self.language = self.language.lower() if self.mi.languages:
self.language = self.mi.languages[0].lower()
ordered = [i for i in self.opf.spine if i.is_linear] + \ ordered = [i for i in self.opf.spine if i.is_linear] + \
[i for i in self.opf.spine if not i.is_linear] [i for i in self.opf.spine if not i.is_linear]
self.spine = [] self.spine = []

View File

@ -953,10 +953,9 @@ class EbookViewer(MainWindow):
det_msg=tb, show=True) det_msg=tb, show=True)
self.close_progress_indicator() self.close_progress_indicator()
else: else:
self.metadata.show_opf(self.iterator.opf, self.metadata.show_metadata(self.iterator.mi, self.iterator.book_format)
self.iterator.book_format)
self.view.current_language = self.iterator.language self.view.current_language = self.iterator.language
title = self.iterator.opf.title title = self.iterator.mi.title
if not title: if not title:
title = os.path.splitext(os.path.basename(pathtoebook))[0] title = os.path.splitext(os.path.basename(pathtoebook))[0]
if self.iterator.toc: if self.iterator.toc:

View File

@ -80,14 +80,13 @@ class Metadata(QWebView): # {{{
def update_layout(self): def update_layout(self):
self.setGeometry(0, 0, self.parent().width(), self.parent().height()) 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.gui2.book_details import render_html, css
from calibre.ebooks.metadata.book.render import mi_to_html from calibre.ebooks.metadata.book.render import mi_to_html
def render_data(mi, use_roman_numbers=True, all_fields=False): 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()) 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) html = render_html(mi, css(), True, self, render_data_func=render_data)
self.setHtml(html) self.setHtml(html)