Добавлена поддержка формата FB3 "для галочки"

This commit is contained in:
Book Pauk
2020-01-07 22:52:28 +07:00
parent ccfb6a6d73
commit f68c610c0d
3 changed files with 57 additions and 3 deletions

View File

@@ -4,14 +4,15 @@ const path = require('path');
const ConvertBase = require('./ConvertBase');
class ConvertDocX extends ConvertBase {
check(data, opts) {
async check(data, opts) {
const {inputFiles} = opts;
if (this.config.useExternalBookConverter &&
inputFiles.sourceFileType && inputFiles.sourceFileType.ext == 'zip') {
//ищем файл '[Content_Types].xml'
for (const file of inputFiles.files) {
if (file.path == '[Content_Types].xml') {
return true;
const contentTypes = await fs.readFile(`${inputFiles.filesDir}/${file.path}`, 'utf8');
return contentTypes.indexOf('/word/document.xml') >= 0;
}
}
}
@@ -30,7 +31,7 @@ class ConvertDocX extends ConvertBase {
}
async run(data, opts) {
if (!this.check(data, opts))
if (!(await this.check(data, opts)))
return false;
await this.checkExternalConverterPresent();

View File

@@ -0,0 +1,52 @@
const fs = require('fs-extra');
const ConvertHtml = require('./ConvertHtml');
class ConvertDocX extends ConvertHtml {
async check(data, opts) {
const {inputFiles} = opts;
if (this.config.useExternalBookConverter &&
inputFiles.sourceFileType && inputFiles.sourceFileType.ext == 'zip') {
//ищем файл '[Content_Types].xml'
for (const file of inputFiles.files) {
if (file.path == '[Content_Types].xml') {
const contentTypes = await fs.readFile(`${inputFiles.filesDir}/${file.path}`, 'utf8');
return contentTypes.indexOf('/fb3/body.xml') >= 0;
}
}
}
return false;
}
getTitle(text) {
let title = '';
const m = text.match(/<title>([\s\S]*?)<\/title>/);
if (m)
title = m[1];
return title.trim();
}
async run(data, opts) {
if (!(await this.check(data, opts)))
return false;
await this.checkExternalConverterPresent();
const {inputFiles} = opts;
let text = await fs.readFile(`${inputFiles.filesDir}/fb3/body.xml`, 'utf8');
const title = this.getTitle(text)
.replace(/<\/?p>/g, '')
;
text = `<title>${title}</title>` + text
.replace(/<title>/g, '<br><b>')
.replace(/<\/title>/g, '</b><br>')
.replace(/<subtitle>/g, '<br><br><subtitle>')
;
return await super.run(Buffer.from(text), {skipCheck: true, cutTitle: true});
}
}
module.exports = ConvertDocX;

View File

@@ -7,6 +7,7 @@ const convertClassFactory = [
require('./ConvertPdf'),
require('./ConvertRtf'),
require('./ConvertDocX'),
require('./ConvertFb3'),
require('./ConvertDoc'),
require('./ConvertMobi'),
require('./ConvertFb2'),