diff --git a/src/calibre/ebooks/oeb/polish/cover.py b/src/calibre/ebooks/oeb/polish/cover.py index 6efb560010..205b486f2d 100644 --- a/src/calibre/ebooks/oeb/polish/cover.py +++ b/src/calibre/ebooks/oeb/polish/cover.py @@ -440,6 +440,19 @@ def remove_cover_image_in_page(container, page, cover_images): break +def has_epub_cover(container): + if find_cover_image(container): + return True + if find_cover_page(container): + return True + spine_items = tuple(container.spine_items) + if spine_items: + candidate = container.abspath_to_name(spine_items[0]) + if find_cover_image_in_page(container, candidate) is not None: + return True + return False + + def set_epub_cover(container, cover_path, report, options=None, image_callback=None): existing_image = options is not None and options.get('existing_image', False) if existing_image: diff --git a/src/calibre/srv/render_book.py b/src/calibre/srv/render_book.py index 32cd0d2d2d..6d530dc347 100644 --- a/src/calibre/srv/render_book.py +++ b/src/calibre/srv/render_book.py @@ -25,7 +25,9 @@ from calibre.ebooks.oeb.base import ( ) from calibre.ebooks.oeb.iterator.book import extract_book from calibre.ebooks.oeb.polish.container import Container as ContainerBase -from calibre.ebooks.oeb.polish.cover import find_cover_image, set_epub_cover +from calibre.ebooks.oeb.polish.cover import ( + find_cover_image, has_epub_cover, set_epub_cover +) from calibre.ebooks.oeb.polish.css import transform_css from calibre.ebooks.oeb.polish.toc import from_xpaths, get_landmarks, get_toc from calibre.ebooks.oeb.polish.utils import extract, guess_type @@ -201,8 +203,9 @@ class Container(ContainerBase): tweak_mode = True - def __init__(self, path_to_ebook, tdir, log=None, book_hash=None, save_bookmark_data=False, book_metadata=None): + def __init__(self, path_to_ebook, tdir, log=None, book_hash=None, save_bookmark_data=False, book_metadata=None, allow_no_cover=False): log = log or default_log + self.allow_no_cover = allow_no_cover book_fmt, opfpath, input_fmt = extract_book(path_to_ebook, tdir, log=log) ContainerBase.__init__(self, tdir, opfpath, log) self.book_metadata = book_metadata @@ -318,12 +321,16 @@ class Container(ContainerBase): cdata = getattr(image_callback, 'cover_data', None) or generic_cover() data.write(cdata) + if self.allow_no_cover and not has_epub_cover(self): + return None, None raster_cover_name, titlepage_name = set_epub_cover( self, cover_path, (lambda *a: None), options={'template':templ}, image_callback=image_callback) else: raster_cover_name = find_cover_image(self, strict=True) if raster_cover_name is None: + if self.allow_no_cover: + return None, None item = self.generate_item(name='cover.jpeg', id_prefix='cover') raster_cover_name = self.href_to_name(item.get('href'), self.opf_name) with self.open(raster_cover_name, 'wb') as dest: diff --git a/src/pyj/read_book/resources.pyj b/src/pyj/read_book/resources.pyj index 37aa49699b..0ea129cd5c 100644 --- a/src/pyj/read_book/resources.pyj +++ b/src/pyj/read_book/resources.pyj @@ -44,9 +44,6 @@ def load_resources(book, root_name, previous_resources, proceed): ui_operations.get_file(book, name, got_one) def got_one(data, name, mimetype): - if False and name is book.manifest.title_page_name: - # Enable to have cover image not preserve aspect ratio - data = data.replace('width: auto; height: auto', 'width: 100vw; height: 100vh') ans[name] = v'[data, mimetype]' if jstype(data) is 'string': find_virtualized_resources(data)