From 4eaa9413f9f2ad610dc1335f1f08ff3344cb74f4 Mon Sep 17 00:00:00 2001 From: Evan Peterson <77evan@gmail.com> Date: Mon, 10 Jan 2022 15:15:19 -0500 Subject: [PATCH] Kobo metadata return correct layout format for fixed layout --- cps/epub.py | 25 +++++++++++++++++++++++++ cps/kobo.py | 3 +++ 2 files changed, 28 insertions(+) diff --git a/cps/epub.py b/cps/epub.py index cbbdcbbd..aae6120b 100644 --- a/cps/epub.py +++ b/cps/epub.py @@ -21,6 +21,7 @@ import zipfile from lxml import etree from . import isoLanguages +from . import config from .helper import split_authors from .constants import BookMeta @@ -39,6 +40,30 @@ def extractCover(zipFile, coverFile, coverpath, tmp_file_name): image.close() return tmp_cover_name +def get_epub_layout(book, book_data): + ns = { + 'n': 'urn:oasis:names:tc:opendocument:xmlns:container', + 'pkg': 'http://www.idpf.org/2007/opf', + } + + file_path = os.path.normpath(os.path.join(config.config_calibre_dir, book.path, book_data.name + "." + book_data.format.lower())) + + epubZip = zipfile.ZipFile(file_path) + + txt = epubZip.read('META-INF/container.xml') + tree = etree.fromstring(txt) + cfname = tree.xpath('n:rootfiles/n:rootfile/@full-path', namespaces=ns)[0] + cf = epubZip.read(cfname) + tree = etree.fromstring(cf) + p = tree.xpath('/pkg:package/pkg:metadata', namespaces=ns)[0] + + layout = p.xpath('pkg:meta[@property="rendition:layout"]/text()', namespaces=ns) + + if len(layout) == 0: + return None + else: + return layout[0] + def get_epub_info(tmp_file_path, original_file_name, original_file_extension): ns = { diff --git a/cps/kobo.py b/cps/kobo.py index ef9a9476..0412ae17 100644 --- a/cps/kobo.py +++ b/cps/kobo.py @@ -49,6 +49,7 @@ import requests from . import config, logger, kobo_auth, db, calibre_db, helper, shelf as shelf_lib, ub, csrf, kobo_sync_status +from .epub import get_epub_layout from .constants import sqlalchemy_version2 from .helper import get_download_link from .services import SyncToken as SyncToken @@ -455,6 +456,8 @@ def get_metadata(book): continue for kobo_format in KOBO_FORMATS[book_data.format]: # log.debug('Id: %s, Format: %s' % (book.id, kobo_format)) + if get_epub_layout(book, book_data) == 'pre-paginated': + kobo_format = 'EPUB3FL' download_urls.append( { "Format": kobo_format,