From 778eaffa972123db37a2bba952442e94c07c296c Mon Sep 17 00:00:00 2001 From: John Schember Date: Mon, 9 May 2011 22:11:23 -0400 Subject: [PATCH] HTMLZ: Fix covers again... --- src/calibre/ebooks/htmlz/input.py | 16 ++++++++-------- src/calibre/ebooks/metadata/extz.py | 20 ++++++++------------ 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/calibre/ebooks/htmlz/input.py b/src/calibre/ebooks/htmlz/input.py index d083fcc4ab..743d8e53eb 100644 --- a/src/calibre/ebooks/htmlz/input.py +++ b/src/calibre/ebooks/htmlz/input.py @@ -7,7 +7,6 @@ __copyright__ = '2011, John Schember ' __docformat__ = 'restructuredtext en' import os -import posixpath from calibre import guess_type, walk from calibre.customize.conversion import InputFormatPlugin @@ -74,22 +73,23 @@ class HTMLZInput(InputFormatPlugin): meta_info_to_oeb_metadata(mi, oeb.metadata, log) # Get the cover path from the OPF. - cover_href = None + cover_path = None opf = None for x in walk('.'): if os.path.splitext(x)[1].lower() in ('.opf'): opf = x break if opf: - opf = OPF(opf) - cover_href = posixpath.relpath(opf.cover, os.path.dirname(stream.name)) + opf = OPF(opf, basedir=os.getcwd()) + cover_path = opf.raster_cover # Set the cover. - if cover_href: + if cover_path: cdata = None - with open(cover_href, 'rb') as cf: + with open(os.path.join(os.getcwd(), cover_path), 'rb') as cf: cdata = cf.read() - id, href = oeb.manifest.generate('cover', cover_href) - oeb.manifest.add(id, href, guess_type(cover_href)[0], data=cdata) + cover_name = os.path.basename(cover_path) + id, href = oeb.manifest.generate('cover', cover_name) + oeb.manifest.add(id, href, guess_type(cover_name)[0], data=cdata) oeb.guide.add('cover', 'Cover', href) return oeb diff --git a/src/calibre/ebooks/metadata/extz.py b/src/calibre/ebooks/metadata/extz.py index 021450fca5..f3725027a9 100644 --- a/src/calibre/ebooks/metadata/extz.py +++ b/src/calibre/ebooks/metadata/extz.py @@ -8,12 +8,11 @@ Read meta information from extZ (TXTZ, HTMLZ...) files. ''' import os -import posixpath from cStringIO import StringIO from calibre.ebooks.metadata import MetaInformation -from calibre.ebooks.metadata.opf2 import OPF, metadata_to_opf +from calibre.ebooks.metadata.opf2 import OPF from calibre.ptempfile import PersistentTemporaryFile from calibre.utils.zipfile import ZipFile, safe_replace @@ -31,9 +30,9 @@ def get_metadata(stream, extract_cover=True): opf = OPF(opf_stream) mi = opf.to_book_metadata() if extract_cover: - cover_href = posixpath.relpath(opf.cover, os.path.dirname(stream.name)) + cover_href = opf.raster_cover if cover_href: - mi.cover_data = ('jpg', zf.read(cover_href)) + mi.cover_data = (os.path.splitext(cover_href)[1], zf.read(cover_href)) except: return mi return mi @@ -59,18 +58,15 @@ def set_metadata(stream, mi): except: pass if new_cdata: - cover = opf.cover - if not cover: - cover = 'cover.jpg' - cpath = posixpath.join(posixpath.dirname(opf_path), cover) + cpath = opf.raster_cover + if not cpath: + cpath = 'cover.jpg' new_cover = _write_new_cover(new_cdata, cpath) replacements[cpath] = open(new_cover.name, 'rb') - mi.cover = cover + mi.cover = cpath # Update the metadata. - old_mi = opf.to_book_metadata() - old_mi.smart_update(mi) - opf.smart_update(metadata_to_opf(old_mi), replace_metadata=True) + opf.smart_update(mi, replace_metadata=True) newopf = StringIO(opf.render()) safe_replace(stream, opf_path, newopf, extra_replacements=replacements, add_missing=True)