summaryrefslogtreecommitdiffstats
path: root/lib/cli/buildEbook.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/cli/buildEbook.js')
-rw-r--r--lib/cli/buildEbook.js76
1 files changed, 76 insertions, 0 deletions
diff --git a/lib/cli/buildEbook.js b/lib/cli/buildEbook.js
new file mode 100644
index 0000000..ce1d836
--- /dev/null
+++ b/lib/cli/buildEbook.js
@@ -0,0 +1,76 @@
+var path = require('path');
+var tmp = require('tmp');
+
+var Promise = require('../utils/promise');
+var fs = require('../utils/fs');
+var Parse = require('../parse');
+var Output = require('../output');
+
+var options = require('./options');
+var getBook = require('./getBook');
+
+
+module.exports = function(format) {
+ return {
+ name: (format + ' [book] [output]'),
+ description: 'build a book into an ebook file',
+ options: [
+ options.log
+ ],
+ exec: function(args, kwargs) {
+ // Output file will be stored in
+ var outputFile = args[1] || ('book.' + format);
+
+ // Create temporary directory
+ var outputFolder = tmp.dirSync().name;
+
+ var book = getBook(args, kwargs);
+ var logger = book.getLogger();
+ var Generator = Output.getGenerator('ebook');
+
+ return Parse.parseBook(book)
+ .then(function(resultBook) {
+ return Output.generate(Generator, resultBook, {
+ root: outputFolder,
+ format: format
+ });
+ })
+
+ // Extract ebook file
+ .then(function(output) {
+ var book = output.getBook();
+ var languages = book.getLanguages();
+
+ if (book.isMultilingual()) {
+ return Promise.ForEach(languages, function(lang) {
+ var langID = lang.getID();
+
+ var langOutputFile = path.join(
+ path.dirname(outputFile),
+ path.basename(outputFile, format) + '_' + langID + format
+ );
+
+ return fs.copy(
+ path.resolve(outputFolder, langID, 'index' + format),
+ langOutputFile
+ );
+ })
+ .thenResolve(languages.getCount());
+ } else {
+ return fs.copy(
+ path.resolve(outputFolder, 'index' + format),
+ outputFile
+ ).thenResolve(1);
+ }
+ })
+
+ // Log end
+ .then(function(count) {
+ logger.info.ok(count + ' file(s) generated');
+
+ logger.debug('cleaning up... ');
+ return logger.debug.promise(fs.rmDir(outputFolder));
+ });
+ }
+ };
+};