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.source = self.opts.input_profile
|
||||||
self.opts.dest = self.opts.output_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
|
from calibre.ebooks.oeb.transforms.metadata import MergeMetadata
|
||||||
MergeMetadata()(self.oeb, self.user_metadata, self.opts,
|
MergeMetadata()(self.oeb, self.user_metadata, self.opts,
|
||||||
override_input_metadata=self.override_input_metadata)
|
override_input_metadata=self.override_input_metadata)
|
||||||
|
@ -34,11 +34,7 @@ class SafeFormatter(Formatter):
|
|||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
|
||||||
class Jacket(object):
|
class Base(object):
|
||||||
'''
|
|
||||||
Book jacket manipulation. Remove first image and insert comments at start of
|
|
||||||
book.
|
|
||||||
'''
|
|
||||||
|
|
||||||
def remove_images(self, item, limit=1):
|
def remove_images(self, item, limit=1):
|
||||||
path = XPath('//h:img[@src]')
|
path = XPath('//h:img[@src]')
|
||||||
@ -50,13 +46,19 @@ class Jacket(object):
|
|||||||
image = self.oeb.manifest.hrefs.get(href, None)
|
image = self.oeb.manifest.hrefs.get(href, None)
|
||||||
if image is not None:
|
if image is not None:
|
||||||
self.oeb.manifest.remove(image)
|
self.oeb.manifest.remove(image)
|
||||||
|
self.oeb.guide.remove_by_href(href)
|
||||||
img.getparent().remove(img)
|
img.getparent().remove(img)
|
||||||
removed += 1
|
removed += 1
|
||||||
return removed
|
return removed
|
||||||
|
|
||||||
|
|
||||||
|
class RemoveFirstImage(Base):
|
||||||
|
|
||||||
def remove_first_image(self):
|
def remove_first_image(self):
|
||||||
deleted_item = None
|
deleted_item = None
|
||||||
for item in self.oeb.spine:
|
for item in self.oeb.spine:
|
||||||
|
if XPath(JACKET_XPATH)(item.data):
|
||||||
|
continue
|
||||||
removed = self.remove_images(item)
|
removed = self.remove_images(item)
|
||||||
if removed > 0:
|
if removed > 0:
|
||||||
self.log('Removed first image')
|
self.log('Removed first image')
|
||||||
@ -74,6 +76,23 @@ class Jacket(object):
|
|||||||
href = urldefrag(item.href)[0]
|
href = urldefrag(item.href)[0]
|
||||||
if href == deleted_item.href:
|
if href == deleted_item.href:
|
||||||
self.oeb.toc.remove(item)
|
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):
|
def insert_metadata(self, mi):
|
||||||
self.log('Inserting metadata into book...')
|
self.log('Inserting metadata into book...')
|
||||||
@ -125,8 +144,6 @@ class Jacket(object):
|
|||||||
'''
|
'''
|
||||||
self.oeb, self.opts, self.log = oeb, opts, oeb.log
|
self.oeb, self.opts, self.log = oeb, opts, oeb.log
|
||||||
self.remove_existing_jacket()
|
self.remove_existing_jacket()
|
||||||
if opts.remove_first_image:
|
|
||||||
self.remove_first_image()
|
|
||||||
if opts.insert_metadata:
|
if opts.insert_metadata:
|
||||||
self.insert_metadata(metadata)
|
self.insert_metadata(metadata)
|
||||||
|
|
||||||
@ -338,4 +355,3 @@ def referenced_images(root):
|
|||||||
path = path[1:]
|
path = path[1:]
|
||||||
if os.path.exists(path):
|
if os.path.exists(path):
|
||||||
yield img, path
|
yield img, path
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user