Рефакторинг, плюс небольшие изменения - подготовка к использованию внешних конвертеров
This commit is contained in:
@@ -3,9 +3,9 @@ const iconv = require('iconv-lite');
|
||||
|
||||
class ConvertFb2 extends ConvertBase {
|
||||
check(data, opts) {
|
||||
const {fileType} = opts;
|
||||
const {dataType} = opts;
|
||||
|
||||
return (fileType && fileType.ext == 'xml' && data.toString().indexOf('<FictionBook') >= 0);
|
||||
return (dataType && dataType.ext == 'xml' && data.toString().indexOf('<FictionBook') >= 0);
|
||||
}
|
||||
|
||||
run(data, opts) {
|
||||
|
||||
@@ -4,9 +4,9 @@ const textUtils = require('./textUtils');
|
||||
|
||||
class ConvertHtml extends ConvertBase {
|
||||
check(data, opts) {
|
||||
const {fileType} = opts;
|
||||
const {dataType} = opts;
|
||||
|
||||
if (fileType && (fileType.ext == 'html' || fileType.ext == 'xml'))
|
||||
if (dataType && (dataType.ext == 'html' || dataType.ext == 'xml'))
|
||||
return {isText: false};
|
||||
|
||||
//может это чистый текст?
|
||||
|
||||
@@ -6,12 +6,13 @@ const ConvertBase = require('./ConvertBase');
|
||||
|
||||
class ConvertSamlib extends ConvertBase {
|
||||
check(data, opts) {
|
||||
const {url} = opts;
|
||||
const {url, dataType} = opts;
|
||||
|
||||
const parsedUrl = new URL(url);
|
||||
if (parsedUrl.hostname == 'samlib.ru' ||
|
||||
if (dataType && dataType.ext == 'html' &&
|
||||
(parsedUrl.hostname == 'samlib.ru' ||
|
||||
parsedUrl.hostname == 'budclub.ru' ||
|
||||
parsedUrl.hostname == 'zhurnal.lib.ru') {
|
||||
parsedUrl.hostname == 'zhurnal.lib.ru')) {
|
||||
return {hostname: parsedUrl.hostname};
|
||||
}
|
||||
|
||||
|
||||
@@ -19,13 +19,13 @@ class BookConverter {
|
||||
}
|
||||
}
|
||||
|
||||
async convertToFb2(inputFile, outputFile, url, callback) {
|
||||
const fileType = await this.detector.detectFile(inputFile);
|
||||
async convertToFb2(inputFiles, outputFile, url, callback) {
|
||||
const selectedFileType = await this.detector.detectFile(inputFiles.selectedFile);
|
||||
|
||||
const data = await fs.readFile(inputFile);
|
||||
const data = await fs.readFile(inputFiles.selectedFile);
|
||||
let result = false;
|
||||
for (const convert of this.convertFactory) {
|
||||
result = convert.run(data, {inputFile, url, callback, fileType});
|
||||
result = convert.run(data, {inputFiles, url, callback, dataType: selectedFileType});
|
||||
if (result) {
|
||||
await fs.writeFile(outputFile, result);
|
||||
break;
|
||||
@@ -33,8 +33,8 @@ class BookConverter {
|
||||
}
|
||||
|
||||
if (!result) {
|
||||
if (fileType)
|
||||
throw new Error(`Этот формат файла не поддерживается: ${fileType.mime}`);
|
||||
if (selectedFileType)
|
||||
throw new Error(`Этот формат файла не поддерживается: ${selectedFileType.mime}`);
|
||||
else {
|
||||
throw new Error(`Не удалось определить формат файла: ${url}`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user