2
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
4
import os, sys, shutil, logging
5
from calibre.ebooks.lrf import option_parser as lrf_option_parser
6
from calibre.ebooks import ConversionError, DRMError
7
from calibre.ebooks.lrf.html.convert_from import process_file as html_process_file
8
from calibre.ebooks.metadata.opf import OPF
9
from calibre.ebooks.metadata.epub import OCFDirReader
10
from calibre.utils.zipfile import ZipFile
11
from calibre import setup_cli_handlers
12
from calibre.ptempfile import PersistentTemporaryDirectory
16
return lrf_option_parser(
17
_('''Usage: %prog [options] mybook.epub
20
%prog converts mybook.epub to mybook.lrf''')
23
def generate_html(pathtoepub, logger):
24
if not os.access(pathtoepub, os.R_OK):
25
raise ConversionError('Cannot read from ' + pathtoepub)
26
tdir = PersistentTemporaryDirectory('_epub2lrf')
29
ZipFile(pathtoepub).extractall(tdir)
31
raise ConversionError, '.epub extraction failed'
32
if os.path.exists(os.path.join(tdir, 'META-INF', 'encryption.xml')):
33
raise DRMError(os.path.basename(pathtoepub))
37
def process_file(path, options, logger=None):
39
level = logging.DEBUG if options.verbose else logging.INFO
40
logger = logging.getLogger('epub2lrf')
41
setup_cli_handlers(logger, level)
42
epub = os.path.abspath(os.path.expanduser(path))
43
tdir = generate_html(epub, logger)
45
ocf = OCFDirReader(tdir)
46
htmlfile = ocf.opf.spine[0].path
47
options.opf = os.path.join(tdir, ocf.container[OPF.MIMETYPE])
48
if not options.output:
49
ext = '.lrs' if options.lrs else '.lrf'
50
options.output = os.path.abspath(os.path.basename(os.path.splitext(path)[0]) + ext)
51
options.output = os.path.abspath(os.path.expanduser(options.output))
52
options.use_spine = True
54
html_process_file(htmlfile, options, logger=logger)
59
logger.warning('Failed to delete temporary directory '+tdir)
62
def main(args=sys.argv, logger=None):
63
parser = option_parser()
64
options, args = parser.parse_args(args)
68
print 'No epub file specified'
70
process_file(args[1], options, logger)
74
if __name__ == '__main__':