EPUB metadata: Add an option to disable adding of cover images to EPUB files that declare no cover image in their metadata (Preferences->Plugins->Customize the Set EPUB metadata plugin)

This commit is contained in:
Kovid Goyal 2016-06-18 10:46:03 +05:30
parent 8ff668d26c
commit c72a6315c2
5 changed files with 20 additions and 8 deletions

View File

@ -432,7 +432,13 @@ class EPUBMetadataWriter(MetadataWriterPlugin):
def set_metadata(self, stream, mi, type): def set_metadata(self, stream, mi, type):
from calibre.ebooks.metadata.epub import set_metadata from calibre.ebooks.metadata.epub import set_metadata
set_metadata(stream, mi, apply_null=self.apply_null, force_identifiers=self.force_identifiers) q = self.site_customization or ''
set_metadata(stream, mi, apply_null=self.apply_null, force_identifiers=self.force_identifiers, add_missing_cover='disable-add-missing-cover' != q)
def customization_help(self, gui=False):
return _('Enter {}disable-add-missing-cover{} below to have the EPUB metadata writer plugin not'
' add cover images to EPUB files that have no existing cover image.').format(
'<i>' if gui else '', '</i>' if gui else '')
class FB2MetadataWriter(MetadataWriterPlugin): class FB2MetadataWriter(MetadataWriterPlugin):

View File

@ -383,12 +383,14 @@ def get_file_type_metadata(stream, ftype):
def set_file_type_metadata(stream, mi, ftype, report_error=None): def set_file_type_metadata(stream, mi, ftype, report_error=None):
ftype = ftype.lower().strip() ftype = ftype.lower().strip()
if ftype in _metadata_writers: if ftype in _metadata_writers:
customization = config['plugin_customization']
for plugin in _metadata_writers[ftype]: for plugin in _metadata_writers[ftype]:
if not is_disabled(plugin): if not is_disabled(plugin):
with plugin: with plugin:
try: try:
plugin.apply_null = apply_null_metadata.apply_null plugin.apply_null = apply_null_metadata.apply_null
plugin.force_identifiers = force_identifiers.force_identifiers plugin.force_identifiers = force_identifiers.force_identifiers
plugin.site_customization = customization.get(plugin.name, '')
plugin.set_metadata(stream, mi, ftype.lower().strip()) plugin.set_metadata(stream, mi, ftype.lower().strip())
break break
except: except:

View File

@ -260,7 +260,7 @@ def serialize_cover_data(new_cdata, cpath):
from calibre.utils.img import save_cover_data_to from calibre.utils.img import save_cover_data_to
return save_cover_data_to(new_cdata, data_fmt=os.path.splitext(cpath)[1][1:]) return save_cover_data_to(new_cdata, data_fmt=os.path.splitext(cpath)[1][1:])
def set_metadata(stream, mi, apply_null=False, update_timestamp=False, force_identifiers=False): def set_metadata(stream, mi, apply_null=False, update_timestamp=False, force_identifiers=False, add_missing_cover=True):
stream.seek(0) stream.seek(0)
reader = get_zip_reader(stream, root=os.getcwdu()) reader = get_zip_reader(stream, root=os.getcwdu())
new_cdata = None new_cdata = None
@ -277,7 +277,8 @@ def set_metadata(stream, mi, apply_null=False, update_timestamp=False, force_ide
opfbytes, ver, raster_cover = set_metadata_opf( opfbytes, ver, raster_cover = set_metadata_opf(
reader.read_bytes(reader.opf_path), mi, cover_prefix=posixpath.dirname(reader.opf_path), reader.read_bytes(reader.opf_path), mi, cover_prefix=posixpath.dirname(reader.opf_path),
cover_data=new_cdata, apply_null=apply_null, update_timestamp=update_timestamp, force_identifiers=force_identifiers) cover_data=new_cdata, apply_null=apply_null, update_timestamp=update_timestamp,
force_identifiers=force_identifiers, add_missing_cover=add_missing_cover)
cpath = None cpath = None
replacements = {} replacements = {}
if new_cdata and raster_cover: if new_cdata and raster_cover:

View File

@ -25,7 +25,8 @@ def get_metadata(stream):
opf = OPF(None, preparsed_opf=root, read_toc=False) opf = OPF(None, preparsed_opf=root, read_toc=False)
return opf.to_book_metadata(), ver, opf.raster_cover, opf.first_spine_item() return opf.to_book_metadata(), ver, opf.raster_cover, opf.first_spine_item()
def set_metadata_opf2(root, cover_prefix, mi, opf_version, cover_data=None, apply_null=False, update_timestamp=False, force_identifiers=False): def set_metadata_opf2(root, cover_prefix, mi, opf_version,
cover_data=None, apply_null=False, update_timestamp=False, force_identifiers=False, add_missing_cover=True):
mi = MetaInformation(mi) mi = MetaInformation(mi)
for x in ('guide', 'toc', 'manifest', 'spine'): for x in ('guide', 'toc', 'manifest', 'spine'):
setattr(mi, x, None) setattr(mi, x, None)
@ -45,7 +46,7 @@ def set_metadata_opf2(root, cover_prefix, mi, opf_version, cover_data=None, appl
if update_timestamp and mi.timestamp is not None: if update_timestamp and mi.timestamp is not None:
opf.timestamp = mi.timestamp opf.timestamp = mi.timestamp
raster_cover = opf.raster_cover raster_cover = opf.raster_cover
if raster_cover is None and cover_data is not None: if raster_cover is None and cover_data is not None and add_missing_cover:
guide_raster_cover = opf.guide_raster_cover guide_raster_cover = opf.guide_raster_cover
i = None i = None
if guide_raster_cover is not None: if guide_raster_cover is not None:
@ -71,11 +72,13 @@ def set_metadata_opf2(root, cover_prefix, mi, opf_version, cover_data=None, appl
with pretty_print: with pretty_print:
return opf.render(), raster_cover return opf.render(), raster_cover
def set_metadata(stream, mi, cover_prefix='', cover_data=None, apply_null=False, update_timestamp=False, force_identifiers=False): def set_metadata(stream, mi, cover_prefix='', cover_data=None, apply_null=False, update_timestamp=False, force_identifiers=False, add_missing_cover=True):
if isinstance(stream, bytes): if isinstance(stream, bytes):
stream = DummyFile(stream) stream = DummyFile(stream)
root = parse_opf(stream) root = parse_opf(stream)
ver = parse_opf_version(root.get('version')) ver = parse_opf_version(root.get('version'))
opfbytes, raster_cover = set_metadata_opf2( opfbytes, raster_cover = set_metadata_opf2(
root, cover_prefix, mi, ver, cover_data=cover_data, apply_null=apply_null, update_timestamp=update_timestamp, force_identifiers=force_identifiers) root, cover_prefix, mi, ver, cover_data=cover_data,
apply_null=apply_null, update_timestamp=update_timestamp,
force_identifiers=force_identifiers, add_missing_cover=add_missing_cover)
return opfbytes, ver, raster_cover return opfbytes, ver, raster_cover

View File

@ -196,7 +196,7 @@ def apply_metadata(root, mi, cover_prefix='', cover_data=None, apply_null=False,
set_identifiers(root, prefixes, refines, mi.identifiers, force_identifiers=force_identifiers) set_identifiers(root, prefixes, refines, mi.identifiers, force_identifiers=force_identifiers)
pretty_print_opf(root) pretty_print_opf(root)
def set_metadata(stream, mi, cover_prefix='', cover_data=None, apply_null=False, update_timestamp=False, force_identifiers=False): def set_metadata(stream, mi, cover_prefix='', cover_data=None, apply_null=False, update_timestamp=False, force_identifiers=False, add_missing_cover=True):
root = parse_opf(stream) root = parse_opf(stream)
return apply_metadata( return apply_metadata(
root, mi, cover_prefix=cover_prefix, cover_data=cover_data, root, mi, cover_prefix=cover_prefix, cover_data=cover_data,