summaryrefslogtreecommitdiffstats
path: root/lib/cli/buildEbook.js
blob: a87fac75aab1edcdf9901bb170fe7ae1f50c69ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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) {
            var extension = '.' + format;

            // Output file will be stored in
            var outputFile = args[1] || ('book' + extension);

            // 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.getList(), function(lang) {
                        var langID = lang.getID();

                        var langOutputFile = path.join(
                            path.dirname(outputFile),
                            path.basename(outputFile, extension) + '_' + langID + extension
                        );

                        return fs.copy(
                            path.resolve(outputFolder, langID, 'index' + extension),
                            langOutputFile
                        );
                    })
                    .thenResolve(languages.getCount());
                } else {
                    return fs.copy(
                        path.resolve(outputFolder, 'index' + extension),
                        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));
            });
        }
    };
};