From 91c331e5f3446827d70f1d202a807680d41ba8a1 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Fri, 1 Mar 2019 21:23:33 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BA=D0=BE=D0=BD=D0=B2=D0=B5=D1=80=D1=82=D0=B5=D1=80?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20Mobi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/BookConverter/ConvertMobi.js | 37 ++++++++++++++++++++++++ server/core/BookConverter/index.js | 1 + server/core/FileDetector/signatures.json | 9 ++++++ 3 files changed, 47 insertions(+) create mode 100644 server/core/BookConverter/ConvertMobi.js diff --git a/server/core/BookConverter/ConvertMobi.js b/server/core/BookConverter/ConvertMobi.js new file mode 100644 index 00000000..e8d6172b --- /dev/null +++ b/server/core/BookConverter/ConvertMobi.js @@ -0,0 +1,37 @@ +const fs = require('fs-extra'); +const path = require('path'); + +const ConvertBase = require('./ConvertBase'); + +class ConvertMobi extends ConvertBase { + async check(data, opts) { + const {inputFiles} = opts; + + return (this.config.useExternalBookConverter && + inputFiles.sourceFileType && inputFiles.sourceFileType.ext == 'mobi'); + } + + async run(data, opts) { + if (!await this.check(data, opts)) + return false; + await this.checkExternalConverterPresent(); + + const {inputFiles, callback} = opts; + + const outFile = `${inputFiles.filesDir}/${path.basename(inputFiles.sourceFile)}`; + const mobiFile = `${outFile}.mobi`; + const fb2File = `${outFile}.fb2`; + + await fs.copy(inputFiles.sourceFile, mobiFile); + + let perc = 0; + await this.execConverter(this.calibrePath, [mobiFile, fb2File], () => { + perc = (perc < 100 ? perc + 5 : 50); + callback(perc); + }); + + return await fs.readFile(fb2File); + } +} + +module.exports = ConvertMobi; diff --git a/server/core/BookConverter/index.js b/server/core/BookConverter/index.js index 33c87693..433c94b8 100644 --- a/server/core/BookConverter/index.js +++ b/server/core/BookConverter/index.js @@ -8,6 +8,7 @@ const convertClassFactory = [ require('./ConvertRtf'), require('./ConvertDocX'), require('./ConvertDoc'), + require('./ConvertMobi'), require('./ConvertFb2'), require('./ConvertSamlib'), require('./ConvertHtml'), diff --git a/server/core/FileDetector/signatures.json b/server/core/FileDetector/signatures.json index 384b3eb2..a267fc06 100644 --- a/server/core/FileDetector/signatures.json +++ b/server/core/FileDetector/signatures.json @@ -711,6 +711,15 @@ ] } ] + }, + + { + "type": "mobi", + "ext": "mobi", + "mime": "application/x-mobipocket-ebook", + "rules": [ + { "type": "equal", "start": 64, "end": 68, "bytes": "4d4f4249" } + ] } ]