Fix #1645 (Picks up thumbnail not cover from some Mobipocket files)

This commit is contained in:
Kovid Goyal 2009-01-19 10:43:34 -08:00
parent 1a98b0c266
commit 383d33e6aa

View File

@ -124,6 +124,7 @@ class BookHeader(object):
sublangid = (langcode >> 10) & 0xFF sublangid = (langcode >> 10) & 0xFF
self.language = main_language.get(langid, 'ENGLISH') self.language = main_language.get(langid, 'ENGLISH')
self.sublanguage = sub_language.get(sublangid, 'NEUTRAL') self.sublanguage = sub_language.get(sublangid, 'NEUTRAL')
self.first_image_index = struct.unpack('>L', raw[0x6c:0x6c+4])[0]
self.exth_flag, = struct.unpack('>L', raw[0x80:0x84]) self.exth_flag, = struct.unpack('>L', raw[0x80:0x84])
self.exth = None self.exth = None
@ -441,17 +442,18 @@ class MobiReader(object):
os.makedirs(output_dir) os.makedirs(output_dir)
image_index = 0 image_index = 0
self.image_names = [] self.image_names = []
for i in range(self.num_sections): for i in range(self.book_header.first_image_index, self.num_sections):
if i in processed_records: if i in processed_records:
continue continue
processed_records.append(i) processed_records.append(i)
data = self.sections[i][0] data = self.sections[i][0]
buf = cStringIO.StringIO(data) buf = cStringIO.StringIO(data)
image_index += 1
try: try:
im = PILImage.open(buf) im = PILImage.open(buf)
except IOError: except IOError, e:
continue continue
image_index += 1
path = os.path.join(output_dir, '%05d.jpg'%image_index) path = os.path.join(output_dir, '%05d.jpg'%image_index)
self.image_names.append(os.path.basename(path)) self.image_names.append(os.path.basename(path))
im.convert('RGB').save(open(path, 'wb'), format='JPEG') im.convert('RGB').save(open(path, 'wb'), format='JPEG')
@ -476,6 +478,7 @@ def get_metadata(stream):
else: else:
tdir = tempfile.mkdtemp('_mobi_meta', __appname__+'_') tdir = tempfile.mkdtemp('_mobi_meta', __appname__+'_')
atexit.register(shutil.rmtree, tdir) atexit.register(shutil.rmtree, tdir)
#print tdir
mr.extract_images([], tdir) mr.extract_images([], tdir)
mi = mr.create_opf('dummy.html') mi = mr.create_opf('dummy.html')
if mi.cover: if mi.cover:
@ -491,7 +494,6 @@ def get_metadata(stream):
if os.access(candidate, os.R_OK): if os.access(candidate, os.R_OK):
cover = candidate cover = candidate
break break
if os.access(cover, os.R_OK): if os.access(cover, os.R_OK):
mi.cover_data = ('JPEG', open(os.path.join(tdir, cover), 'rb').read()) mi.cover_data = ('JPEG', open(os.path.join(tdir, cover), 'rb').read())
else: else: