X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/b6ec0976a383cc1823f4a199bc3e6dc40880b049..fc7a8368b6033616780d563149d78db33b6b91a3:/librarian/mobi.py diff --git a/librarian/mobi.py b/librarian/mobi.py old mode 100755 new mode 100644 index a93315e..61a6de1 --- a/librarian/mobi.py +++ b/librarian/mobi.py @@ -3,49 +3,48 @@ # This file is part of Librarian, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # + +from copy import deepcopy import os import subprocess from tempfile import NamedTemporaryFile from librarian import OutputFile -from librarian.cover import WLCover -from librarian import get_resource -def transform(wldoc, verbose=False, - sample=None, cover=None, flags=None): +def transform(wldoc, verbose=False, sample=None, cover=None, + use_kindlegen=False, flags=None, hyphenate=True): """ produces a MOBI file wldoc: a WLDocument sample=n: generate sample e-book (with at least n paragraphs) - cover: a cover.Cover object + cover: a cover.Cover factory overriding default flags: less-advertising, """ - book_info = wldoc.book_info - - # provide a cover by default - if not cover: - cover = WLCover - cover_file = NamedTemporaryFile(suffix='.png', delete=False) - c = cover(book_info.author.readable(), book_info.title) - c.save(cover_file) - - if not flags: - flags = [] - flags = list(flags) + ['without-fonts'] - epub = wldoc.as_epub(verbose=verbose, sample=sample, html_toc=True, - flags=flags, style=get_resource('mobi/style.css')) + document = deepcopy(wldoc) + del wldoc + epub = document.as_epub(verbose=verbose, sample=sample, + html_toc=True, cover=cover or True, flags=flags, + hyphenate=hyphenate) if verbose: kwargs = {} else: devnull = open("/dev/null", 'w') kwargs = {"stdout": devnull, "stderr": devnull} - output_file = NamedTemporaryFile(prefix='librarian', suffix='.mobi', delete=False) + output_file = NamedTemporaryFile(prefix='librarian', suffix='.mobi', + delete=False) output_file.close() - subprocess.check_call(['ebook-convert', epub.get_filename(), output_file.name, - '--no-inline-toc', '--cover=%s' % cover_file.name], **kwargs) - os.unlink(cover_file.name) - return OutputFile.from_filename(output_file.name) \ No newline at end of file + + if use_kindlegen: + output_file_basename = os.path.basename(output_file.name) + subprocess.check_call(['kindlegen', '-c2', epub.get_filename(), + '-o', output_file_basename], **kwargs) + else: + subprocess.check_call(['ebook-convert', epub.get_filename(), + output_file.name, '--no-inline-toc', + '--mobi-file-type=both', + '--mobi-ignore-margins'], **kwargs) + return OutputFile.from_filename(output_file.name)