mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Support reading metadata from KEPUB files
This commit is contained in:
parent
e23dcffe43
commit
30bcd86634
@ -167,14 +167,14 @@ class CHMMetadataReader(MetadataReaderPlugin):
|
||||
class EPUBMetadataReader(MetadataReaderPlugin):
|
||||
|
||||
name = 'Read EPUB metadata'
|
||||
file_types = {'epub'}
|
||||
description = _('Read metadata from %s files')%'EPUB'
|
||||
file_types = {'epub', 'kepub'}
|
||||
description = _('Read metadata from EPUB and KEPUB files')
|
||||
|
||||
def get_metadata(self, stream, ftype):
|
||||
from calibre.ebooks.metadata.epub import get_metadata, get_quick_metadata
|
||||
if self.quick:
|
||||
return get_quick_metadata(stream)
|
||||
return get_metadata(stream)
|
||||
return get_quick_metadata(stream, ftype=ftype)
|
||||
return get_metadata(stream, ftype=ftype)
|
||||
|
||||
|
||||
class FB2MetadataReader(MetadataReaderPlugin):
|
||||
|
@ -258,12 +258,12 @@ def get_cover(raster_cover, first_spine_item, reader):
|
||||
return render_cover(first_spine_item, zf, reader=reader)
|
||||
|
||||
|
||||
def get_metadata(stream, extract_cover=True):
|
||||
def get_metadata(stream, extract_cover=True, ftype='epub'):
|
||||
''' Return metadata as a :class:`Metadata` object '''
|
||||
stream.seek(0)
|
||||
reader = get_zip_reader(stream)
|
||||
opfbytes = reader.read_bytes(reader.opf_path)
|
||||
mi, ver, raster_cover, first_spine_item = get_metadata_from_opf(opfbytes)
|
||||
mi, ver, raster_cover, first_spine_item = get_metadata_from_opf(opfbytes, ftype)
|
||||
if extract_cover:
|
||||
base = posixpath.dirname(reader.opf_path)
|
||||
if raster_cover:
|
||||
@ -281,7 +281,7 @@ def get_metadata(stream, extract_cover=True):
|
||||
return mi
|
||||
|
||||
|
||||
def get_quick_metadata(stream):
|
||||
def get_quick_metadata(stream, ftype='epub'):
|
||||
return get_metadata(stream, False)
|
||||
|
||||
|
||||
|
@ -20,26 +20,30 @@ class DummyFile:
|
||||
return self.raw
|
||||
|
||||
|
||||
def get_metadata2(root, ver):
|
||||
def get_metadata2(root, ver, ftype='epub'):
|
||||
opf = OPF(None, preparsed_opf=root, read_toc=False)
|
||||
return opf.to_book_metadata(), ver, opf.raster_cover, opf.first_spine_item()
|
||||
if ftype == 'kepub':
|
||||
raster_cover = opf.epub3_raster_cover or opf.raster_cover
|
||||
else:
|
||||
raster_cover = opf.raster_cover
|
||||
return opf.to_book_metadata(), ver, raster_cover, opf.first_spine_item()
|
||||
|
||||
|
||||
def get_metadata3(root, ver):
|
||||
def get_metadata3(root, ver, ftype='epub'):
|
||||
return read_metadata(root, ver=ver, return_extra_data=True)
|
||||
|
||||
|
||||
def get_metadata_from_parsed(root):
|
||||
def get_metadata_from_parsed(root, ftype='epub'):
|
||||
ver = parse_opf_version(root.get('version'))
|
||||
f = get_metadata2 if ver.major < 3 else get_metadata3
|
||||
return f(root, ver)
|
||||
return f(root, ver, ftype)
|
||||
|
||||
|
||||
def get_metadata(stream):
|
||||
def get_metadata(stream, ftype='epub'):
|
||||
if isinstance(stream, bytes):
|
||||
stream = DummyFile(stream)
|
||||
root = parse_opf(stream)
|
||||
return get_metadata_from_parsed(root)
|
||||
return get_metadata_from_parsed(root, ftype)
|
||||
|
||||
|
||||
def set_metadata_opf2(root, cover_prefix, mi, opf_version,
|
||||
|
Loading…
x
Reference in New Issue
Block a user