diff --git a/src/calibre/ebooks/metadata/epub.py b/src/calibre/ebooks/metadata/epub.py index 30fe53f1a2..b5845144f8 100644 --- a/src/calibre/ebooks/metadata/epub.py +++ b/src/calibre/ebooks/metadata/epub.py @@ -129,28 +129,9 @@ class OCFDirReader(OCFReader): def open(self, path, *args, **kwargs): return open(os.path.join(self.root, path), *args, **kwargs) -def get_cover(opf, opf_path, stream, reader=None): +def render_cover(opf, opf_path, zf, reader=None): from calibre.ebooks import render_html_svg_workaround from calibre.utils.logging import default_log - raster_cover = opf.raster_cover - stream.seek(0) - zf = ZipFile(stream) - if raster_cover: - base = posixpath.dirname(opf_path) - cpath = posixpath.normpath(posixpath.join(base, raster_cover)) - if reader is not None and \ - reader.encryption_meta.is_encrypted(cpath): - return - try: - member = zf.getinfo(cpath) - except: - pass - else: - f = zf.open(member) - data = f.read() - f.close() - zf.close() - return data cpage = opf.first_spine_item() if not cpage: @@ -174,6 +155,29 @@ def get_cover(opf, opf_path, stream, reader=None): return return render_html_svg_workaround(cpage, default_log) +def get_cover(opf, opf_path, stream, reader=None): + raster_cover = opf.raster_cover + stream.seek(0) + zf = ZipFile(stream) + if raster_cover: + base = posixpath.dirname(opf_path) + cpath = posixpath.normpath(posixpath.join(base, raster_cover)) + if reader is not None and \ + reader.encryption_meta.is_encrypted(cpath): + return + try: + member = zf.getinfo(cpath) + except: + pass + else: + f = zf.open(member) + data = f.read() + f.close() + zf.close() + return data + + return render_cover(opf, opf_path, zf, reader=reader) + def get_metadata(stream, extract_cover=True): """ Return metadata as a :class:`Metadata` object """ stream.seek(0) diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index 9b8ae12b10..8d37e95dc4 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -1019,6 +1019,11 @@ class OPF(object): # {{{ mt = item.get('media-type', '') if 'xml' not in mt: return item.get('href', None) + for item in self.itermanifest(): + if item.get('href', None) == cover_id: + mt = item.get('media-type', '') + if mt.startswith('image/'): + return item.get('href', None) @dynamic_property def cover(self):