def set_epub_cover(container, cover_path, report, options=None): existing_image = options is not None and options.get( 'existing_image', False) if existing_image: existing_image = cover_path cover_image = find_cover_image(container) cover_page = find_cover_page(container) wrapped_image = extra_cover_page = None updated = False log = container.log possible_removals = set(clean_opf(container)) possible_removals # TODO: Handle possible_removals and also iterate over links in the removed # pages and handle possibly removing stylesheets referred to by them. spine_items = tuple(container.spine_items) if cover_page is None: # Check if the first item in the spine is a simple cover wrapper candidate = container.abspath_to_name(spine_items[0]) if find_cover_image_in_page(container, candidate) is not None: cover_page = candidate if cover_page is not None: log('Found existing cover page') wrapped_image = find_cover_image_in_page(container, cover_page) if len(spine_items) > 1: # Look for an extra cover page c = container.abspath_to_name(spine_items[1]) if c != cover_page: candidate = find_cover_image_in_page(container, c) if candidate and candidate in {wrapped_image, cover_image}: log('Found an extra cover page that is a simple wrapper, removing it' ) # This page has only a single image and that image is the # cover image, remove it. container.remove_item(c) extra_cover_page = c spine_items = spine_items[:1] + spine_items[2:] elif candidate is None: # Remove the cover image if it is the first image in this # page remove_cover_image_in_page(container, c, {wrapped_image, cover_image}) if wrapped_image is not None: # The cover page is a simple wrapper around a single cover image, # we can remove it safely. log('Existing cover page is a simple wrapper, removing it') container.remove_item(cover_page) if wrapped_image != existing_image: container.remove_item(wrapped_image) updated = True if cover_image and cover_image != wrapped_image: # Remove the old cover image if cover_image != existing_image: container.remove_item(cover_image) # Insert the new cover raster_cover, titlepage = create_epub_cover(container, cover_path, existing_image, options=options) report(_('Cover updated') if updated else _('Cover inserted')) # Replace links to the old cover image/cover page link_sub = { s: d for s, d in { cover_page: titlepage, wrapped_image: raster_cover, cover_image: raster_cover, extra_cover_page: titlepage }.iteritems() if s is not None and s != d } if link_sub: replace_links(container, link_sub, frag_map=lambda x, y: None)
def set_epub_cover(container, cover_path, report): cover_image = find_cover_image(container) cover_page = find_cover_page(container) wrapped_image = extra_cover_page = None updated = False log = container.log possible_removals = set(clean_opf(container)) possible_removals # TODO: Handle possible_removals and also iterate over links in the removed # pages and handle possibly removing stylesheets referred to by them. spine_items = tuple(container.spine_items) if cover_page is None: # Check if the first item in the spine is a simple cover wrapper candidate = container.abspath_to_name(spine_items[0]) if find_cover_image_in_page(container, candidate) is not None: cover_page = candidate if cover_page is not None: log('Found existing cover page') wrapped_image = find_cover_image_in_page(container, cover_page) if len(spine_items) > 1: # Look for an extra cover page c = container.abspath_to_name(spine_items[1]) if c != cover_page: candidate = find_cover_image_in_page(container, c) if candidate and candidate in {wrapped_image, cover_image}: log('Found an extra cover page that is a simple wrapper, removing it') # This page has only a single image and that image is the # cover image, remove it. container.remove_item(c) extra_cover_page = c spine_items = spine_items[:1] + spine_items[2:] elif candidate is None: # Remove the cover image if it is the first image in this # page remove_cover_image_in_page(container, c, {wrapped_image, cover_image}) if wrapped_image is not None: # The cover page is a simple wrapper around a single cover image, # we can remove it safely. log('Existing cover page is a simple wrapper, removing it') container.remove_item(cover_page) container.remove_item(wrapped_image) updated = True if cover_image and cover_image != wrapped_image: # Remove the old cover image container.remove_item(cover_image) # Insert the new cover raster_cover, titlepage = create_epub_cover(container, cover_path) report('Cover updated' if updated else 'Cover inserted') # Replace links to the old cover image/cover page link_sub = {s:d for s, d in { cover_page:titlepage, wrapped_image:raster_cover, cover_image:raster_cover, extra_cover_page:titlepage}.iteritems() if s is not None} if link_sub: replace_links(container, link_sub, frag_map=lambda x, y:None)