Skip to content

Commit 30bcd86

Browse files
committed
Support reading metadata from KEPUB files
1 parent e23dcff commit 30bcd86

3 files changed

Lines changed: 18 additions & 14 deletions

File tree

src/calibre/customize/builtins.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,14 @@ def get_metadata(self, stream, ftype):
167167
class EPUBMetadataReader(MetadataReaderPlugin):
168168

169169
name = 'Read EPUB metadata'
170-
file_types = {'epub'}
171-
description = _('Read metadata from %s files')%'EPUB'
170+
file_types = {'epub', 'kepub'}
171+
description = _('Read metadata from EPUB and KEPUB files')
172172

173173
def get_metadata(self, stream, ftype):
174174
from calibre.ebooks.metadata.epub import get_metadata, get_quick_metadata
175175
if self.quick:
176-
return get_quick_metadata(stream)
177-
return get_metadata(stream)
176+
return get_quick_metadata(stream, ftype=ftype)
177+
return get_metadata(stream, ftype=ftype)
178178

179179

180180
class FB2MetadataReader(MetadataReaderPlugin):

src/calibre/ebooks/metadata/epub.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -258,12 +258,12 @@ def get_cover(raster_cover, first_spine_item, reader):
258258
return render_cover(first_spine_item, zf, reader=reader)
259259

260260

261-
def get_metadata(stream, extract_cover=True):
261+
def get_metadata(stream, extract_cover=True, ftype='epub'):
262262
''' Return metadata as a :class:`Metadata` object '''
263263
stream.seek(0)
264264
reader = get_zip_reader(stream)
265265
opfbytes = reader.read_bytes(reader.opf_path)
266-
mi, ver, raster_cover, first_spine_item = get_metadata_from_opf(opfbytes)
266+
mi, ver, raster_cover, first_spine_item = get_metadata_from_opf(opfbytes, ftype)
267267
if extract_cover:
268268
base = posixpath.dirname(reader.opf_path)
269269
if raster_cover:
@@ -281,7 +281,7 @@ def get_metadata(stream, extract_cover=True):
281281
return mi
282282

283283

284-
def get_quick_metadata(stream):
284+
def get_quick_metadata(stream, ftype='epub'):
285285
return get_metadata(stream, False)
286286

287287

src/calibre/ebooks/metadata/opf.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,30 @@ def read(self):
2020
return self.raw
2121

2222

23-
def get_metadata2(root, ver):
23+
def get_metadata2(root, ver, ftype='epub'):
2424
opf = OPF(None, preparsed_opf=root, read_toc=False)
25-
return opf.to_book_metadata(), ver, opf.raster_cover, opf.first_spine_item()
25+
if ftype == 'kepub':
26+
raster_cover = opf.epub3_raster_cover or opf.raster_cover
27+
else:
28+
raster_cover = opf.raster_cover
29+
return opf.to_book_metadata(), ver, raster_cover, opf.first_spine_item()
2630

2731

28-
def get_metadata3(root, ver):
32+
def get_metadata3(root, ver, ftype='epub'):
2933
return read_metadata(root, ver=ver, return_extra_data=True)
3034

3135

32-
def get_metadata_from_parsed(root):
36+
def get_metadata_from_parsed(root, ftype='epub'):
3337
ver = parse_opf_version(root.get('version'))
3438
f = get_metadata2 if ver.major < 3 else get_metadata3
35-
return f(root, ver)
39+
return f(root, ver, ftype)
3640

3741

38-
def get_metadata(stream):
42+
def get_metadata(stream, ftype='epub'):
3943
if isinstance(stream, bytes):
4044
stream = DummyFile(stream)
4145
root = parse_opf(stream)
42-
return get_metadata_from_parsed(root)
46+
return get_metadata_from_parsed(root, ftype)
4347

4448

4549
def set_metadata_opf2(root, cover_prefix, mi, opf_version,

0 commit comments

Comments
 (0)