mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
When adding a new cover image to an EPUB file that does not have a marked cover image, also check the guide for any images that are marked as covers
This commit is contained in:
parent
525216d957
commit
8ff668d26c
@ -46,10 +46,18 @@ def set_metadata_opf2(root, cover_prefix, mi, opf_version, cover_data=None, appl
|
||||
opf.timestamp = mi.timestamp
|
||||
raster_cover = opf.raster_cover
|
||||
if raster_cover is None and cover_data is not None:
|
||||
guide_raster_cover = opf.guide_raster_cover
|
||||
i = None
|
||||
if guide_raster_cover is not None:
|
||||
i = guide_raster_cover
|
||||
raster_cover = i.get('href')
|
||||
else:
|
||||
if cover_prefix and not cover_prefix.endswith('/'):
|
||||
cover_prefix += '/'
|
||||
name = cover_prefix + 'cover.jpg'
|
||||
i = create_manifest_item(opf.root, name, 'cover')
|
||||
if i is not None:
|
||||
raster_cover = name
|
||||
if i is not None:
|
||||
if opf_version.major < 3:
|
||||
[x.getparent().remove(x) for x in opf.root.xpath('//*[local-name()="meta" and @name="cover"]')]
|
||||
@ -59,7 +67,6 @@ def set_metadata_opf2(root, cover_prefix, mi, opf_version, cover_data=None, appl
|
||||
for x in opf.root.xpath('//*[local-name()="item" and contains(@properties, "cover-image")]'):
|
||||
x.set('properties', x.get('properties').replace('cover-image', '').strip())
|
||||
i.set('properties', 'cover-image')
|
||||
raster_cover = name
|
||||
|
||||
with pretty_print:
|
||||
return opf.render(), raster_cover
|
||||
|
@ -523,6 +523,7 @@ class OPF(object): # {{{
|
||||
pubdate_path = XPath('descendant::*[re:match(name(), "date", "i")]')
|
||||
raster_cover_path = XPath('descendant::*[re:match(name(), "meta", "i") and ' +
|
||||
're:match(@name, "cover", "i") and @content]')
|
||||
guide_cover_path = XPath('descendant::*[local-name()="guide"]/*[local-name()="reference" and re:match(@type, "cover", "i")]/@href')
|
||||
identifier_path = XPath('descendant::*[re:match(name(), "identifier", "i")]')
|
||||
application_id_path = XPath('descendant::*[re:match(name(), "identifier", "i") and '+
|
||||
'(re:match(@opf:scheme, "calibre|libprs500", "i") or re:match(@scheme, "calibre|libprs500", "i"))]')
|
||||
@ -1173,6 +1174,19 @@ class OPF(object): # {{{
|
||||
if mt and 'xml' not in mt and 'html' not in mt:
|
||||
return item.get('href', None)
|
||||
|
||||
@property
|
||||
def guide_raster_cover(self):
|
||||
covers = self.guide_cover_path(self.root)
|
||||
if covers:
|
||||
mt_map = {i.get('href'):i for i in self.itermanifest()}
|
||||
for href in covers:
|
||||
if href:
|
||||
i = mt_map.get(href)
|
||||
if i is not None:
|
||||
iid, mt = i.get('id'), i.get('media-type')
|
||||
if iid and mt and mt.lower() in {'image/png', 'image/jpeg', 'image/jpg', 'image/gif'}:
|
||||
return i
|
||||
|
||||
@property
|
||||
def epub3_nav(self):
|
||||
if self.package_version >= 3.0:
|
||||
|
Loading…
x
Reference in New Issue
Block a user