From 92c454b3e9e20f03c7696c451d150add67f1b36a Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Tue, 12 Feb 2019 23:21:14 +0700 Subject: [PATCH 1/7] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/BookConverter/textUtils.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/core/BookConverter/textUtils.js b/server/core/BookConverter/textUtils.js index 2471c1ec..316f0ec7 100644 --- a/server/core/BookConverter/textUtils.js +++ b/server/core/BookConverter/textUtils.js @@ -62,7 +62,10 @@ function getEncoding(buf) { sorted.sort((a, b) => b.c - a.c); - return sorted[0].codePage; + if (sorted[0].c > 0) + return sorted[0].codePage; + else + return 'ISO-8859-5'; } function checkIfText(buf) { From 7ab5d4e113d1d754c30a846057ce7d90ccc2b63b Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 13 Feb 2019 12:57:59 +0700 Subject: [PATCH 2/7] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=B2=20url=20=D0=BF=D1=80=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D0=BA=D0=BE=D0=BB=20http,=20=D0=B5=D1=81=D0=BB=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/Reader.vue | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index 80b2a5b0..d6262cb6 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -591,14 +591,19 @@ class Reader extends Vue { } loadBook(opts) { - if (!opts) { + if (!opts || !opts.url) { this.mostRecentBook(); return; } + let url = opts.url; + if ((url.indexOf('http://') != 0) && (url.indexOf('https://') != 0) && + (url.indexOf('file://') != 0)) + url = 'http://' + url; + // уже просматривается сейчас const lastBook = (this.$refs.page ? this.$refs.page.lastBook : null); - if (!opts.force && lastBook && lastBook.url == opts.url && bookManager.hasBookParsed(lastBook)) { + if (!opts.force && lastBook && lastBook.url == url && bookManager.hasBookParsed(lastBook)) { this.loaderActive = false; return; } @@ -615,7 +620,7 @@ class Reader extends Vue { progress.setState({state: 'parse'}); // есть ли среди недавних - const key = bookManager.keyFromUrl(opts.url); + const key = bookManager.keyFromUrl(url); let wasOpened = await bookManager.getRecentBook({key}); wasOpened = (wasOpened ? wasOpened : {}); const bookPos = (opts.bookPos !== undefined ? opts.bookPos : wasOpened.bookPos); @@ -626,7 +631,7 @@ class Reader extends Vue { if (!opts.force) { // пытаемся загрузить и распарсить книгу в менеджере из локального кэша - const bookParsed = await bookManager.getBook({url: opts.url}, (prog) => { + const bookParsed = await bookManager.getBook({url}, (prog) => { progress.setState({progress: prog}); }); @@ -662,7 +667,7 @@ class Reader extends Vue { // не удалось, скачиваем книгу полностью с конвертацией let loadCached = true; if (!book) { - book = await readerApi.loadBook(opts.url, (state) => { + book = await readerApi.loadBook(url, (state) => { progress.setState(state); }); loadCached = false; From 4bdd33b44fc4ea3cc1bf85d037d9af879c699973 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 13 Feb 2019 13:01:41 +0700 Subject: [PATCH 3/7] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B8=D0=B9=20?= =?UTF-8?q?=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/Reader.vue | 92 +++++++++++++++-------------- 1 file changed, 48 insertions(+), 44 deletions(-) diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index d6262cb6..97b62e5e 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -440,51 +440,55 @@ class Reader extends Vue { buttonClick(button) { const activeClass = this.buttonActiveClass(button); - if (!activeClass['tool-button-disabled']) - switch (button) { - case 'loader': - this.loaderToggle(); - break; - case 'undoAction': - if (this.actionCur > 0) { - this.actionCur--; - this.bookPosChanged({bookPos: this.actionList[this.actionCur]}); - } - break; - case 'redoAction': - if (this.actionCur < this.actionList.length - 1) { - this.actionCur++; - this.bookPosChanged({bookPos: this.actionList[this.actionCur]}); - } - break; - case 'fullScreen': - this.fullScreenToggle(); - break; - case 'setPosition': - this.setPositionToggle(); - break; - case 'scrolling': - this.scrollingToggle(); - break; - case 'search': - this.searchToggle(); - break; - case 'copyText': - this.copyTextToggle(); - break; - case 'history': - this.historyToggle(); - break; - case 'refresh': - if (this.mostRecentBook()) { - this.loadBook({url: this.mostRecentBook().url, force: true}); - } - break; - case 'settings': - this.settingsToggle(); - break; - } + this.$refs[button].$el.blur(); + + if (activeClass['tool-button-disabled']) + return; + + switch (button) { + case 'loader': + this.loaderToggle(); + break; + case 'undoAction': + if (this.actionCur > 0) { + this.actionCur--; + this.bookPosChanged({bookPos: this.actionList[this.actionCur]}); + } + break; + case 'redoAction': + if (this.actionCur < this.actionList.length - 1) { + this.actionCur++; + this.bookPosChanged({bookPos: this.actionList[this.actionCur]}); + } + break; + case 'fullScreen': + this.fullScreenToggle(); + break; + case 'setPosition': + this.setPositionToggle(); + break; + case 'scrolling': + this.scrollingToggle(); + break; + case 'search': + this.searchToggle(); + break; + case 'copyText': + this.copyTextToggle(); + break; + case 'history': + this.historyToggle(); + break; + case 'refresh': + if (this.mostRecentBook()) { + this.loadBook({url: this.mostRecentBook().url, force: true}); + } + break; + case 'settings': + this.settingsToggle(); + break; + } } buttonActiveClass(button) { From bce31df7e600ae51a3001c6c81c1a8d6356807f4 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 13 Feb 2019 13:12:26 +0700 Subject: [PATCH 4/7] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B0=D0=B2=D1=82=D0=BE=D1=80=D0=B0=20?= =?UTF-8?q?=D0=B8=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reader/HistoryPage/HistoryPage.vue | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/client/components/Reader/HistoryPage/HistoryPage.vue b/client/components/Reader/HistoryPage/HistoryPage.vue index 630654a1..a9884b13 100644 --- a/client/components/Reader/HistoryPage/HistoryPage.vue +++ b/client/components/Reader/HistoryPage/HistoryPage.vue @@ -141,17 +141,27 @@ class HistoryPage extends Vue { } const fb2 = (book.fb2 ? book.fb2 : {}); + + let title = fb2.bookTitle; + if (title) + title = `"${title}"`; + else + title = ''; + + let author = _.compact([ + fb2.lastName, + fb2.firstName, + fb2.middleName + ]).join(' '); + author = (author ? author : (fb2.bookTitle ? fb2.bookTitle : book.url)); + result.push({ touchDateTime: book.touchTime, touchDate: t[0], touchTime: t[1], desc: { - title: `"${fb2.bookTitle}"${perc}${textLen}`, - author: _.compact([ - fb2.lastName, - fb2.firstName, - fb2.middleName - ]).join(' '), + title: `${title}${perc}${textLen}`, + author, }, url: book.url, path: book.path, From 9a44f53e5fd2ba0b0b90da1427ad5befd97652bc Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 13 Feb 2019 13:39:53 +0700 Subject: [PATCH 5/7] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D1=80=D0=B0=D1=81=D0=BF=D0=BE=D0=B7=D0=BD=D0=B0=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=B4=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8=20fb2=20=D0=B8=20=D0=BA=D0=BE=D0=BD=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B2=20utf8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/BookConverter/index.js | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/server/core/BookConverter/index.js b/server/core/BookConverter/index.js index 1a6adaf9..a87bbdbe 100644 --- a/server/core/BookConverter/index.js +++ b/server/core/BookConverter/index.js @@ -22,8 +22,8 @@ class BookConverter { callback(100); if (fileType && (fileType.ext == 'html' || fileType.ext == 'xml')) { - if (data.toString().indexOf('= 0) { - await fs.writeFile(outputFile, data); + if (data.toString().indexOf('= 0) { + await fs.writeFile(outputFile, this.checkEncoding(data)); return; } @@ -69,6 +69,26 @@ class BookConverter { return iconv.decode(data, selected); } + checkEncoding(data) { + let result = data; + + const left = data.indexOf('= 0) { + const right = data.indexOf('?>', left); + if (right >= 0) { + const head = data.slice(left, right + 2).toString(); + const m = head.match(/encoding="(.*)"/); + if (m) { + let encoding = m[1].toLowerCase(); + if (encoding != 'utf-8') + result = iconv.decode(data, encoding); + } + } + } + + return result; + } + convertHtml(data, isText) { let titleInfo = {}; let desc = {_n: 'description', 'title-info': titleInfo}; From 6b9ad4a947d375e7495e5ed8f033639c6afd81ea Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 13 Feb 2019 13:44:34 +0700 Subject: [PATCH 6/7] =?UTF-8?q?=D0=9A=20=D0=BF=D1=80=D0=B5=D0=B4=D1=8B?= =?UTF-8?q?=D0=B4=D1=83=D1=89=D0=B5=D0=BC=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/BookConverter/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/core/BookConverter/index.js b/server/core/BookConverter/index.js index a87bbdbe..9160629c 100644 --- a/server/core/BookConverter/index.js +++ b/server/core/BookConverter/index.js @@ -80,8 +80,10 @@ class BookConverter { const m = head.match(/encoding="(.*)"/); if (m) { let encoding = m[1].toLowerCase(); - if (encoding != 'utf-8') + if (encoding != 'utf-8') { result = iconv.decode(data, encoding); + result = Buffer.from(result.toString().replace(m[0], 'encoding="utf-8"')); + } } } } From 23ecb433fb779be930aebcdd95f99a084f820fec Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 13 Feb 2019 13:45:34 +0700 Subject: [PATCH 7/7] =?UTF-8?q?=D0=92=D0=B5=D1=80=D1=81=D0=B8=D1=8F=200.1.?= =?UTF-8?q?3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7bddb107..c57049b6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Liberama", - "version": "0.1.2", + "version": "0.1.3", "engines": { "node": ">=10.0.0" },