From 7f90c0922711fcfa1b5a38817d28208a468dea2a Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sun, 9 Jun 2019 16:44:11 +0700 Subject: [PATCH] =?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=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B5=D1=81=D1=81?= =?UTF-8?q?=D0=B1=D0=B0=D1=80=D0=B0=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7?= =?UTF-8?q?=D0=BA=D0=B8/=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BA=D0=BD=D0=B8=D0=B3=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/share/bookManager.js | 47 +++++++++++++++++-- client/components/Reader/versionHistory.js | 1 + 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/client/components/Reader/share/bookManager.js b/client/components/Reader/share/bookManager.js index 0bb8972e..19659ffd 100644 --- a/client/components/Reader/share/bookManager.js +++ b/client/components/Reader/share/bookManager.js @@ -143,6 +143,34 @@ class BookManager { } } + + async deflateWithProgress(data, callback) { + const chunkSize = 16384; + const deflator = new utils.pako.Deflate({level: 9}); + + let chunkTotal = 1 + Math.floor(data.length/chunkSize); + let chunkNum = 0; + + for (var i = 0; i < data.length; i += chunkSize) { + if ((i + chunkSize) >= data.length) { + deflator.push(data.substring(i, i + chunkSize), true); + } else { + deflator.push(data.substring(i, i + chunkSize), false); + } + chunkNum++; + callback(Math.round(chunkNum/chunkTotal*100)); + await utils.sleep(1); + } + + if (deflator.err) { + throw new Error(deflator.msg); + } + + callback(100); + + return deflator.result; + } + async addBook(newBook, callback) { if (!this.books) await this.init(); @@ -151,7 +179,12 @@ class BookManager { meta.addTime = Date.now(); const cb = (perc) => { - const p = Math.round(80*perc/100); + const p = Math.round(30*perc/100); + callback(p); + }; + + const cb2 = (perc) => { + const p = Math.round(30 + 65*perc/100); callback(p); }; @@ -160,10 +193,11 @@ class BookManager { let data = newBook.data; if (result.dataCompressed) { - data = utils.pako.deflate(data, {level: 9}); + //data = utils.pako.deflate(data, {level: 9}); + data = await this.deflateWithProgress(data, cb2); result.dataCompressedLength = data.byteLength; } - callback(90); + callback(95); this.books[meta.key] = result; this.booksCached[meta.key] = this.metaOnly(result); @@ -202,7 +236,12 @@ class BookManager { await utils.sleep(10); if (result.dataCompressed) { - data = utils.pako.inflate(data, {to: 'string'}); + try { + data = utils.pako.inflate(data, {to: 'string'}); + } catch (e) { + this.delBook(meta); + throw e; + } } callback(20); diff --git a/client/components/Reader/versionHistory.js b/client/components/Reader/versionHistory.js index 538d122f..950852c5 100644 --- a/client/components/Reader/versionHistory.js +++ b/client/components/Reader/versionHistory.js @@ -7,6 +7,7 @@ export const versionHistory = [ ` },