summaryrefslogtreecommitdiffstats
path: root/lib/output/ebook/onFinish.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/output/ebook/onFinish.js')
-rw-r--r--lib/output/ebook/onFinish.js66
1 files changed, 63 insertions, 3 deletions
diff --git a/lib/output/ebook/onFinish.js b/lib/output/ebook/onFinish.js
index e82f679..17a8e5e 100644
--- a/lib/output/ebook/onFinish.js
+++ b/lib/output/ebook/onFinish.js
@@ -1,16 +1,22 @@
+var path = require('path');
+
var WebsiteGenerator = require('../website');
var JSONUtils = require('../../json');
var Templating = require('../../templating');
+var Promise = require('../../utils/promise');
+var error = require('../../utils/error');
+var command = require('../../utils/command');
var writeFile = require('../helper/writeFile');
+var getConvertOptions = require('./getConvertOptions');
+
/**
- Finish the generation, generates the SUMMARY.html
+ Write the SUMMARY.html
@param {Output}
@return {Output}
*/
-function onFinish(output) {
- var book = output.getBook();
+function writeSummary(output) {
var options = output.getOptions();
var prefix = options.get('prefix');
@@ -27,4 +33,58 @@ function onFinish(output) {
});
}
+/**
+ Generate the ebook file as "index.pdf"
+
+ @param {Output}
+ @return {Output}
+*/
+function runEbookConvert(output) {
+ var logger = output.getLogger();
+ var options = output.getOptions();
+ var format = options.get('format');
+ var outputFolder = output.getRoot();
+
+ if (!format) {
+ return Promise(output);
+ }
+
+ return getConvertOptions(output)
+ .then(function(options) {
+ var cmd = [
+ 'ebook-convert',
+ path.resolve(outputFolder, 'SUMMARY.html'),
+ path.resolve(outputFolder, 'index.' + format),
+ command.optionsToShellArgs(options)
+ ].join(' ');
+
+ return command.exec(cmd)
+ .progress(function(data) {
+ logger.debug(data);
+ })
+ .fail(function(err) {
+ if (err.code == 127) {
+ throw error.RequireInstallError({
+ cmd: 'ebook-convert',
+ install: 'Install it from Calibre: https://calibre-ebook.com'
+ });
+ }
+
+ throw error.EbookError(err);
+ });
+ })
+ .thenResolve(output);
+}
+
+/**
+ Finish the generation, generates the SUMMARY.html
+
+ @param {Output}
+ @return {Output}
+*/
+function onFinish(output) {
+ return writeSummary(output)
+ .then(runEbookConvert);
+}
+
module.exports = onFinish;