mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Improve metadata reading from LIT files
This commit is contained in:
parent
223c36f20b
commit
ccd7aaa5c9
@ -6,33 +6,28 @@ Support for reading the metadata from a LIT file.
|
|||||||
|
|
||||||
import sys, cStringIO, os
|
import sys, cStringIO, os
|
||||||
|
|
||||||
from calibre import relpath
|
|
||||||
from calibre.ebooks.metadata import MetaInformation
|
from calibre.ebooks.metadata import MetaInformation
|
||||||
from calibre.ebooks.metadata.opf import OPFReader
|
from calibre.ebooks.metadata.opf2 import OPF
|
||||||
from calibre.ebooks.lit.reader import LitReader
|
from calibre.ebooks.lit.reader import LitReader
|
||||||
|
|
||||||
def get_metadata(stream):
|
def get_metadata(stream):
|
||||||
try:
|
litfile = LitReader(stream)
|
||||||
litfile = LitReader(stream)
|
src = litfile.meta.encode('utf-8')
|
||||||
src = litfile.meta.encode('utf-8')
|
opf = OPF(cStringIO.StringIO(src), os.getcwd())
|
||||||
mi = OPFReader(cStringIO.StringIO(src), dir=os.getcwd())
|
mi = MetaInformation(opf)
|
||||||
cover_url, cover_item = mi.cover, None
|
covers = []
|
||||||
if cover_url:
|
for item in opf.iterguide():
|
||||||
cover_url = relpath(cover_url, os.getcwd())
|
if 'cover' not in item.get('type', '').lower():
|
||||||
for item in litfile.manifest.values():
|
continue
|
||||||
if item.path == cover_url:
|
href = item.get('href', '')
|
||||||
cover_item = item.internal
|
candidates = [href, href.replace('&', '%26')]
|
||||||
if cover_item is not None:
|
for item in litfile.manifest.values():
|
||||||
ext = cover_url.rpartition('.')[-1]
|
if item.path in candidates:
|
||||||
if not ext:
|
covers.append(item.internal)
|
||||||
ext = 'jpg'
|
break
|
||||||
else:
|
covers = [litfile.get_file('/data/' + i) for i in covers]
|
||||||
ext = ext.lower()
|
covers.sort(cmp=lambda x, y:cmp(len(x), len(y)))
|
||||||
cd = litfile.get_file('/data/' + cover_item)
|
mi.cover_data = ('jpg', covers[-1])
|
||||||
mi.cover_data = (ext, cd) if cd else (None, None)
|
|
||||||
except:
|
|
||||||
title = stream.name if hasattr(stream, 'name') and stream.name else 'Unknown'
|
|
||||||
mi = MetaInformation(title, ['Unknown'])
|
|
||||||
return mi
|
return mi
|
||||||
|
|
||||||
def main(args=sys.argv):
|
def main(args=sys.argv):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user