diff --git a/src/calibre/ebooks/mobi/kindlegen.py b/src/calibre/ebooks/mobi/kindlegen.py deleted file mode 100644 index 111f2311a8..0000000000 --- a/src/calibre/ebooks/mobi/kindlegen.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env python -# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai -from __future__ import (unicode_literals, division, absolute_import, - print_function) - -__license__ = 'GPL v3' -__copyright__ = '2011, Kovid Goyal ' -__docformat__ = 'restructuredtext en' - -import os, subprocess, shutil, tempfile - -from lxml import etree - -from calibre.constants import iswindows -from calibre.customize.ui import plugin_for_output_format -from calibre.ptempfile import TemporaryDirectory -from calibre.ebooks.mobi.utils import detect_periodical -from calibre import CurrentDir - -exe = 'kindlegen.exe' if iswindows else 'kindlegen' - -def refactor_opf(opf, is_periodical, toc): - with open(opf, 'rb') as f: - root = etree.fromstring(f.read()) - ''' - for spine in root.xpath('//*[local-name() = "spine" and @toc]'): - # Do not use the NCX toc as kindlegen requires the section structure - # in the TOC to be duplicated in the HTML, asinine! - del spine.attrib['toc'] - ''' - if is_periodical: - metadata = root.xpath('//*[local-name() = "metadata"]')[0] - xm = etree.SubElement(metadata, 'x-metadata') - xm.tail = '\n' - xm.text = '\n\t' - mobip = etree.SubElement(xm, 'output', attrib={'encoding':"utf-8", - 'content-type':"application/x-mobipocket-subscription-magazine"}) - mobip.tail = '\n\t' - with open(opf, 'wb') as f: - f.write(etree.tostring(root, method='xml', encoding='utf-8', - xml_declaration=True)) - - -def refactor_guide(oeb): - for key in list(oeb.guide): - if key not in ('toc', 'start', 'masthead'): - oeb.guide.remove(key) - -def run_kindlegen(opf, log): - log.info('Running kindlegen on MOBIML created by calibre') - oname = os.path.splitext(opf)[0] + '.mobi' - p = subprocess.Popen([exe, opf, '-c1', '-verbose', '-o', oname], - stderr=subprocess.STDOUT, stdout=subprocess.PIPE) - ko = p.stdout.read() - returncode = p.wait() - log.debug('kindlegen verbose output:') - log.debug(ko.decode('utf-8', 'replace')) - log.info('kindlegen returned returncode: %d'%returncode) - if not os.path.exists(oname) or os.stat(oname).st_size < 100: - raise RuntimeError('kindlegen did not produce any output. ' - 'kindlegen return code: %d'%returncode) - return oname - -def kindlegen(oeb, opts, input_plugin, output_path): - is_periodical = detect_periodical(oeb.toc, oeb.log) - refactor_guide(oeb) - with TemporaryDirectory('_kindlegen_output') as tdir: - oeb_output = plugin_for_output_format('oeb') - oeb_output.convert(oeb, tdir, input_plugin, opts, oeb.log) - opf = [x for x in os.listdir(tdir) if x.endswith('.opf')][0] - refactor_opf(os.path.join(tdir, opf), is_periodical, oeb.toc) - try: - td = tempfile.gettempdir() - kd = os.path.join(td, 'kindlegen') - if os.path.exists(kd): - shutil.rmtree(kd) - shutil.copytree(tdir, kd) - oeb.log('kindlegen intermediate output stored in: %s'%kd) - except: - pass - - with CurrentDir(tdir): - oname = run_kindlegen(opf, oeb.log) - shutil.copyfile(oname, output_path) - - diff --git a/src/calibre/ebooks/mobi/output.py b/src/calibre/ebooks/mobi/output.py index 37f90fec98..4f5d09c894 100644 --- a/src/calibre/ebooks/mobi/output.py +++ b/src/calibre/ebooks/mobi/output.py @@ -55,13 +55,6 @@ class MOBIOutput(OutputFormatPlugin): ' specified directory. If the directory already ' 'exists, it will be deleted.') ), - OptionRecommendation(name='kindlegen', - recommended_value=False, - help=('Use kindlegen (must be in your PATH) to generate the' - ' binary wrapper for the MOBI format. Useful to debug ' - ' the calibre MOBI output.') - ), - ]) def check_for_periodical(self): @@ -175,13 +168,9 @@ class MOBIOutput(OutputFormatPlugin): MobiWriter else: from calibre.ebooks.mobi.writer import MobiWriter - if opts.kindlegen: - from calibre.ebooks.mobi.kindlegen import kindlegen - kindlegen(oeb, opts, input_plugin, output_path) - else: - writer = MobiWriter(opts, - write_page_breaks_after_item=write_page_breaks_after_item) - writer(oeb, output_path) + writer = MobiWriter(opts, + write_page_breaks_after_item=write_page_breaks_after_item) + writer(oeb, output_path) if opts.extract_to is not None: from calibre.ebooks.mobi.debug import inspect_mobi