From 40f72d17e6d4beea02bdfc9f44d912a27210492d Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Tue, 8 Nov 2022 22:07:11 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=B4=20BookInfoDialog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/WebWorker.js | 13 ++++++------- server/core/xml/Fb2Parser.js | 18 +++++++++++++----- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/server/core/WebWorker.js b/server/core/WebWorker.js index 0cb502f..e7c68f5 100644 --- a/server/core/WebWorker.js +++ b/server/core/WebWorker.js @@ -473,15 +473,14 @@ class WebWorker { const rows = await db.select({table: 'book', where: `@@id(${db.esc(bookId)})`}); const book = rows[0]; - let fb2 = false; - if (book.ext == 'fb2') { - const parsedFb2 = await this.fb2Parser.getDescAndCover(bookFile); - fb2 = parsedFb2; - } - bookInfo.book = book; - bookInfo.fb2 = fb2; bookInfo.cover = ''; + bookInfo.fb2 = false; + + if (book.ext == 'fb2') { + const {desc, cover} = await this.fb2Parser.getDescAndCover(bookFile); + bookInfo.fb2 = desc; + } await fs.writeFile(bookFileInfo, JSON.stringify(bookInfo, null, 2)); } else { diff --git a/server/core/xml/Fb2Parser.js b/server/core/xml/Fb2Parser.js index 05383e9..13a2824 100644 --- a/server/core/xml/Fb2Parser.js +++ b/server/core/xml/Fb2Parser.js @@ -2,7 +2,7 @@ const fs = require('fs-extra'); const iconv = require('iconv-lite'); const textUtils = require('./textUtils'); -const xmlParser = require('./xmlParser'); +const XmlParser = require('./XmlParser'); const utils = require('../utils'); class Fb2Parser { @@ -55,12 +55,20 @@ class Fb2Parser { data = await utils.gunzipBuffer(data); //data = this.checkEncoding(data); - const result = xmlParser.parseXml(data.toString(), true, (route) => { - console.log(route); - return true; + const xml = new XmlParser(); + + xml.fromString(data.toString(), { + lowerCase: true, + pickNode: route => route.indexOf('fictionbook/body') !== 0, }); - return xmlParser.simplifyXmlParsed(result); + let cover = null; + //console.log(xml.toString()); + //xml.each(node => console.log(node.name)); + + const desc = xml.$$('description').toObject(); + + return {desc, cover}; } }