diff --git a/cps/epub.py b/cps/epub.py index 3eb317a4..61a9d85c 100644 --- a/cps/epub.py +++ b/cps/epub.py @@ -21,6 +21,7 @@ import zipfile from lxml import etree from . import isoLanguages, cover +from . import config from .helper import split_authors from .constants import BookMeta @@ -41,6 +42,30 @@ def _extract_cover(zip_file, cover_file, cover_path, tmp_file_name): cf = zip_file.read(zip_cover_path) return cover.cover_processing(tmp_file_name, cf, extension) +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 9df1acbc..5cbc1844 100644 --- a/cps/kobo.py +++ b/cps/kobo.py @@ -46,6 +46,7 @@ import requests from . import config, logger, kobo_auth, db, calibre_db, helper, shelf as shelf_lib, ub, csrf, kobo_sync_status from . import isoLanguages +from .epub import get_epub_layout from .constants import sqlalchemy_version2, COVER_THUMBNAIL_SMALL from .helper import get_download_link from .services import SyncToken as SyncToken @@ -459,6 +460,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,