From da04475ff15ad5c3f03f81e6bb61fb73752ff22d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 24 Sep 2018 17:26:31 +0530 Subject: [PATCH] Also load metadata when loading manifest --- src/calibre/gui2/viewer2/convert_book.py | 2 +- src/calibre/gui2/viewer2/web_view.py | 5 +++++ src/calibre/srv/render_book.py | 11 ++++++++++- src/pyj/viewer-main.pyj | 7 ++++--- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/calibre/gui2/viewer2/convert_book.py b/src/calibre/gui2/viewer2/convert_book.py index 80303ae62a..1fa3a69e43 100644 --- a/src/calibre/gui2/viewer2/convert_book.py +++ b/src/calibre/gui2/viewer2/convert_book.py @@ -107,7 +107,7 @@ def prepare_convert(temp_path, key, st): def do_convert(path, temp_path, key, instance): tdir = os.path.join(temp_path, instance['path']) fork_job('calibre.srv.render_book', 'render', args=( - path, tdir, {'size': instance['file_size'], 'mtime': instance['file_mtime'], 'hash': key} + path, tdir, {'size': instance['file_size'], 'mtime': instance['file_mtime'], 'hash': key}, True, ), timeout=3000, no_output=True ) size = 0 diff --git a/src/calibre/gui2/viewer2/web_view.py b/src/calibre/gui2/viewer2/web_view.py index 595442b1ec..1d818e21e8 100644 --- a/src/calibre/gui2/viewer2/web_view.py +++ b/src/calibre/gui2/viewer2/web_view.py @@ -89,6 +89,11 @@ class UrlSchemeHandler(QWebEngineUrlSchemeHandler): import traceback traceback.print_exc() rq.fail(rq.RequestFailed) + elif name == 'manifest': + manifest, mime_type = get_data('calibre-book-manifest.json') + metadata = get_data('calibre-book-metadata.json')[0] + data = b'[' + manifest + b',' + metadata + b']' + self.send_reply(rq, mime_type, data) def send_reply(self, rq, mime_type, data): if sip.isdeleted(rq): diff --git a/src/calibre/srv/render_book.py b/src/calibre/srv/render_book.py index cc0cc9755f..b8eb346afb 100644 --- a/src/calibre/srv/render_book.py +++ b/src/calibre/srv/render_book.py @@ -522,8 +522,17 @@ def html_as_dict(root): return {'ns_map':ns_map, 'tag_map':tags, 'tree':tree} -def render(pathtoebook, output_dir, book_hash=None): +def render(pathtoebook, output_dir, book_hash=None, serialize_metadata=False): Container(pathtoebook, output_dir, book_hash=book_hash) + if serialize_metadata: + from calibre.ebooks.metadata.meta import get_metadata + from calibre.ebooks.metadata.book.serialize import metadata_as_dict + with lopen(pathtoebook, 'rb') as f: + mi = get_metadata(f, os.path.splitext(pathtoebook)[1][1:].lower()) + d = metadata_as_dict(mi) + d.pop('cover_data', None) + with lopen(os.path.join(output_dir, 'calibre-book-metadata.json'), 'wb') as f: + f.write(json.dumps(d)) if __name__ == '__main__': diff --git a/src/pyj/viewer-main.pyj b/src/pyj/viewer-main.pyj index 914653cb5a..6ceebb2a4f 100644 --- a/src/pyj/viewer-main.pyj +++ b/src/pyj/viewer-main.pyj @@ -45,8 +45,9 @@ def manifest_received(key, end_type, xhr, ev): nonlocal book if end_type is 'load': book = new_book(key, {}) - book.manifest = JSON.parse(xhr.responseText) - book.metadata = book.manifest.metadata + data = JSON.parse(xhr.responseText) + book.manifest = data[0] + book.metadata = book.manifest.metadata = data[1] book.stored_files = {} book.is_complete = True v'delete book.manifest["metadata"]' @@ -96,7 +97,7 @@ def start_book_load(key, prefs): if view is None: create_session_data(prefs) view = View(document.getElementById('view')) - ajax('book/calibre-book-manifest.json', manifest_received.bind(None, key), ok_code=0).send() + ajax('manifest', manifest_received.bind(None, key), ok_code=0).send() def onerror(msg, script_url, line_number, column_number, error_object):