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):
|
class EPUBMetadataReader(MetadataReaderPlugin):
|
||||||
|
|
||||||
name = 'Read EPUB metadata'
|
name = 'Read EPUB metadata'
|
||||||
file_types = {'epub'}
|
file_types = {'epub', 'kepub'}
|
||||||
description = _('Read metadata from %s files')%'EPUB'
|
description = _('Read metadata from EPUB and KEPUB files')
|
||||||
|
|
||||||
def get_metadata(self, stream, ftype):
|
def get_metadata(self, stream, ftype):
|
||||||
from calibre.ebooks.metadata.epub import get_metadata, get_quick_metadata
|
from calibre.ebooks.metadata.epub import get_metadata, get_quick_metadata
|
||||||
if self.quick:
|
if self.quick:
|
||||||
return get_quick_metadata(stream)
|
return get_quick_metadata(stream, ftype=ftype)
|
||||||
return get_metadata(stream)
|
return get_metadata(stream, ftype=ftype)
|
||||||
|
|
||||||
|
|
||||||
class FB2MetadataReader(MetadataReaderPlugin):
|
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)
|
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 '''
|
''' Return metadata as a :class:`Metadata` object '''
|
||||||
stream.seek(0)
|
stream.seek(0)
|
||||||
reader = get_zip_reader(stream)
|
reader = get_zip_reader(stream)
|
||||||
opfbytes = reader.read_bytes(reader.opf_path)
|
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:
|
if extract_cover:
|
||||||
base = posixpath.dirname(reader.opf_path)
|
base = posixpath.dirname(reader.opf_path)
|
||||||
if raster_cover:
|
if raster_cover:
|
||||||
@ -281,7 +281,7 @@ def get_metadata(stream, extract_cover=True):
|
|||||||
return mi
|
return mi
|
||||||
|
|
||||||
|
|
||||||
def get_quick_metadata(stream):
|
def get_quick_metadata(stream, ftype='epub'):
|
||||||
return get_metadata(stream, False)
|
return get_metadata(stream, False)
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,26 +20,30 @@ class DummyFile:
|
|||||||
return self.raw
|
return self.raw
|
||||||
|
|
||||||
|
|
||||||
def get_metadata2(root, ver):
|
def get_metadata2(root, ver, ftype='epub'):
|
||||||
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()
|
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)
|
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'))
|
ver = parse_opf_version(root.get('version'))
|
||||||
f = get_metadata2 if ver.major < 3 else get_metadata3
|
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):
|
if isinstance(stream, bytes):
|
||||||
stream = DummyFile(stream)
|
stream = DummyFile(stream)
|
||||||
root = parse_opf(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,
|
def set_metadata_opf2(root, cover_prefix, mi, opf_version,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user