mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Conversion: Fix regression that broke conversion of some epub files when using the "Remove first image" option. Fixes #1660699 [Private bug](https://bugs.launchpad.net/calibre/+bug/1660699)
Conversion: Ensure that the "Remove first image" conversion option does not remove the new cover image specified as a conversion option.
This commit is contained in:
parent
d2d3f8b67f
commit
1428b0afda
@ -1101,6 +1101,8 @@ OptionRecommendation(name='search_replace',
|
||||
self.opts.source = self.opts.input_profile
|
||||
self.opts.dest = self.opts.output_profile
|
||||
|
||||
from calibre.ebooks.oeb.transforms.jacket import RemoveFirstImage
|
||||
RemoveFirstImage()(self.oeb, self.opts, self.user_metadata)
|
||||
from calibre.ebooks.oeb.transforms.metadata import MergeMetadata
|
||||
MergeMetadata()(self.oeb, self.user_metadata, self.opts,
|
||||
override_input_metadata=self.override_input_metadata)
|
||||
|
@ -34,11 +34,7 @@ class SafeFormatter(Formatter):
|
||||
return ''
|
||||
|
||||
|
||||
class Jacket(object):
|
||||
'''
|
||||
Book jacket manipulation. Remove first image and insert comments at start of
|
||||
book.
|
||||
'''
|
||||
class Base(object):
|
||||
|
||||
def remove_images(self, item, limit=1):
|
||||
path = XPath('//h:img[@src]')
|
||||
@ -50,13 +46,19 @@ class Jacket(object):
|
||||
image = self.oeb.manifest.hrefs.get(href, None)
|
||||
if image is not None:
|
||||
self.oeb.manifest.remove(image)
|
||||
self.oeb.guide.remove_by_href(href)
|
||||
img.getparent().remove(img)
|
||||
removed += 1
|
||||
return removed
|
||||
|
||||
|
||||
class RemoveFirstImage(Base):
|
||||
|
||||
def remove_first_image(self):
|
||||
deleted_item = None
|
||||
for item in self.oeb.spine:
|
||||
if XPath(JACKET_XPATH)(item.data):
|
||||
continue
|
||||
removed = self.remove_images(item)
|
||||
if removed > 0:
|
||||
self.log('Removed first image')
|
||||
@ -74,6 +76,23 @@ class Jacket(object):
|
||||
href = urldefrag(item.href)[0]
|
||||
if href == deleted_item.href:
|
||||
self.oeb.toc.remove(item)
|
||||
self.oeb.guide.remove_by_href(deleted_item.href)
|
||||
|
||||
def __call__(self, oeb, opts, metadata):
|
||||
'''
|
||||
Add metadata in jacket.xhtml if specified in opts
|
||||
If not specified, remove previous jacket instance
|
||||
'''
|
||||
self.oeb, self.opts, self.log = oeb, opts, oeb.log
|
||||
if opts.remove_first_image:
|
||||
self.remove_first_image()
|
||||
|
||||
|
||||
class Jacket(Base):
|
||||
'''
|
||||
Book jacket manipulation. Remove first image and insert comments at start of
|
||||
book.
|
||||
'''
|
||||
|
||||
def insert_metadata(self, mi):
|
||||
self.log('Inserting metadata into book...')
|
||||
@ -125,8 +144,6 @@ class Jacket(object):
|
||||
'''
|
||||
self.oeb, self.opts, self.log = oeb, opts, oeb.log
|
||||
self.remove_existing_jacket()
|
||||
if opts.remove_first_image:
|
||||
self.remove_first_image()
|
||||
if opts.insert_metadata:
|
||||
self.insert_metadata(metadata)
|
||||
|
||||
@ -338,4 +355,3 @@ def referenced_images(root):
|
||||
path = path[1:]
|
||||
if os.path.exists(path):
|
||||
yield img, path
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user