diff --git a/src/libprs500/ebooks/lrf/html/convert_from.py b/src/libprs500/ebooks/lrf/html/convert_from.py index 012710227c..ebdbffc0f0 100644 --- a/src/libprs500/ebooks/lrf/html/convert_from.py +++ b/src/libprs500/ebooks/lrf/html/convert_from.py @@ -1650,7 +1650,6 @@ def process_file(path, options, logger=None): re.compile(fpba[2], re.IGNORECASE)] if not hasattr(options, 'anchor_ids'): options.anchor_ids = True - options.use_spine = options.use_spine and options.toc.toc is not None files = options.spine if options.use_spine else [path] conv = HTMLConverter(book, fonts, options, logger, files) if options.use_spine: @@ -1667,10 +1666,13 @@ def process_file(path, options, logger=None): return oname def try_opf(path, options, logger): - try: - opf = glob.glob(os.path.join(os.path.dirname(path),'*.opf'))[0] - except IndexError: - return + if hasattr(options, 'opf'): + opf = options.opf + else: + try: + opf = glob.glob(os.path.join(os.path.dirname(path),'*.opf'))[0] + except IndexError: + return dirpath = os.path.dirname(os.path.abspath(opf)) opf = OPFReader(open(opf, 'rb'), dirpath) try: diff --git a/src/libprs500/ebooks/lrf/lit/convert_from.py b/src/libprs500/ebooks/lrf/lit/convert_from.py index c39aa2161a..8e75bed56e 100644 --- a/src/libprs500/ebooks/lrf/lit/convert_from.py +++ b/src/libprs500/ebooks/lrf/lit/convert_from.py @@ -12,6 +12,7 @@ ## You should have received a copy of the GNU General Public License along ## with this program; if not, write to the Free Software Foundation, Inc., ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +from libprs500.ebooks.metadata.opf import OPFReader import os, sys, shutil, glob, logging from tempfile import mkdtemp @@ -56,30 +57,39 @@ def process_file(path, options, logger=None): lit = os.path.abspath(os.path.expanduser(path)) tdir = generate_html(lit, logger) try: - l = glob.glob(os.path.join(tdir, '*toc*.htm*')) - if not l: - l = glob.glob(os.path.join(tdir, '*top*.htm*')) - if not l: - l = glob.glob(os.path.join(tdir, '*contents*.htm*')) - if not l: - l = glob.glob(os.path.join(tdir, '*.htm*')) + opf = glob.glob(os.path.join(tdir, '*.opf')) + if opf: + path = opf[0] + opf = OPFReader(path) + htmlfile = opf.spine.items().next().href + print htmlfile + options.opf = path + else: + l = glob.glob(os.path.join(tdir, '*toc*.htm*')) if not l: - l = glob.glob(os.path.join(tdir, '*.txt*')) # Some lit file apparently have .txt files in them + l = glob.glob(os.path.join(tdir, '*top*.htm*')) + if not l: + l = glob.glob(os.path.join(tdir, '*contents*.htm*')) + if not l: + l = glob.glob(os.path.join(tdir, '*.htm*')) if not l: - raise ConversionError('Conversion of lit to html failed. Cannot find html file.') - maxsize, htmlfile = 0, None - for c in l: - sz = os.path.getsize(c) - if sz > maxsize: - maxsize, htmlfile = sz, c - else: - htmlfile = l[0] + l = glob.glob(os.path.join(tdir, '*.txt*')) # Some lit file apparently have .txt files in them + if not l: + raise ConversionError('Conversion of lit to html failed. Cannot find html file.') + maxsize, htmlfile = 0, None + for c in l: + sz = os.path.getsize(c) + if sz > maxsize: + maxsize, htmlfile = sz, c + else: + htmlfile = l[0] if not options.output: ext = '.lrs' if options.lrs else '.lrf' options.output = os.path.abspath(os.path.basename(os.path.splitext(path)[0]) + ext) options.output = os.path.abspath(os.path.expanduser(options.output)) options.minimum_indent = 100 options.use_spine = True + html_process_file(htmlfile, options, logger=logger) finally: shutil.rmtree(tdir) diff --git a/src/libprs500/ebooks/metadata/opf.py b/src/libprs500/ebooks/metadata/opf.py index ed7794791f..fe96b58e13 100644 --- a/src/libprs500/ebooks/metadata/opf.py +++ b/src/libprs500/ebooks/metadata/opf.py @@ -95,10 +95,17 @@ class OPFReader(MetaInformation): ENTITY_PATTERN = re.compile(r'&(\S+);') def __init__(self, stream, dir=os.getcwd()): + manage = False + if not hasattr(stream, 'read'): + manage = True + dir = os.path.dirname(stream) + stream = open(stream, 'rb') self.default_title = stream.name if hasattr(stream, 'name') else 'Unknown' if hasattr(stream, 'seek'): stream.seek(0) self.soup = BeautifulStoneSoup(stream.read()) + if manage: + stream.close() self.series = self.series_index = self.rating = None self.manifest = Manifest(self.soup, dir) self.spine = Spine(self.soup, self.manifest)