Improve metadata reading from LIT files

This commit is contained in:
Kovid Goyal 2009-01-21 18:18:48 -08:00
parent 223c36f20b
commit ccd7aaa5c9

View File

@ -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):