Also load metadata when loading manifest

This commit is contained in:
Kovid Goyal 2018-09-24 17:26:31 +05:30
parent d62024d1b1
commit da04475ff1
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
4 changed files with 20 additions and 5 deletions

View File

@ -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

View File

@ -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):

View File

@ -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__':

View File

@ -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):