diff --git a/src/calibre/customize/builtins.py b/src/calibre/customize/builtins.py index 129f5a18f0..aaab0f0ff6 100644 --- a/src/calibre/customize/builtins.py +++ b/src/calibre/customize/builtins.py @@ -432,7 +432,13 @@ class EPUBMetadataWriter(MetadataWriterPlugin): def set_metadata(self, stream, mi, type): 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( + '' if gui else '', '' if gui else '') class FB2MetadataWriter(MetadataWriterPlugin): diff --git a/src/calibre/customize/ui.py b/src/calibre/customize/ui.py index ad7f861344..81e80c0978 100644 --- a/src/calibre/customize/ui.py +++ b/src/calibre/customize/ui.py @@ -383,12 +383,14 @@ def get_file_type_metadata(stream, ftype): def set_file_type_metadata(stream, mi, ftype, report_error=None): ftype = ftype.lower().strip() if ftype in _metadata_writers: + customization = config['plugin_customization'] for plugin in _metadata_writers[ftype]: if not is_disabled(plugin): with plugin: try: plugin.apply_null = apply_null_metadata.apply_null plugin.force_identifiers = force_identifiers.force_identifiers + plugin.site_customization = customization.get(plugin.name, '') plugin.set_metadata(stream, mi, ftype.lower().strip()) break except: diff --git a/src/calibre/ebooks/metadata/epub.py b/src/calibre/ebooks/metadata/epub.py index e643ea0087..f36a8c6255 100644 --- a/src/calibre/ebooks/metadata/epub.py +++ b/src/calibre/ebooks/metadata/epub.py @@ -260,7 +260,7 @@ def serialize_cover_data(new_cdata, cpath): from calibre.utils.img import save_cover_data_to 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) reader = get_zip_reader(stream, root=os.getcwdu()) 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( 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 replacements = {} if new_cdata and raster_cover: diff --git a/src/calibre/ebooks/metadata/opf.py b/src/calibre/ebooks/metadata/opf.py index 5211d349e4..dcec6c06d4 100644 --- a/src/calibre/ebooks/metadata/opf.py +++ b/src/calibre/ebooks/metadata/opf.py @@ -25,7 +25,8 @@ def get_metadata(stream): opf = OPF(None, preparsed_opf=root, read_toc=False) 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) for x in ('guide', 'toc', 'manifest', 'spine'): 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: opf.timestamp = mi.timestamp 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 i = 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: 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): stream = DummyFile(stream) root = parse_opf(stream) ver = parse_opf_version(root.get('version')) 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 diff --git a/src/calibre/ebooks/metadata/opf3.py b/src/calibre/ebooks/metadata/opf3.py index eae6a2502c..df766c4009 100644 --- a/src/calibre/ebooks/metadata/opf3.py +++ b/src/calibre/ebooks/metadata/opf3.py @@ -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) 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) return apply_metadata( root, mi, cover_prefix=cover_prefix, cover_data=cover_data,