diff --git a/client/components/App.vue b/client/components/App.vue index a568a3a9..514aaaf6 100644 --- a/client/components/App.vue +++ b/client/components/App.vue @@ -47,14 +47,12 @@ //----------------------------------------------------------------------------- import Vue from 'vue'; import Component from 'vue-class-component'; +import * as utils from '../share/utils'; export default @Component({ watch: { - rootRoute: function() { - this.setAppTitle(); - this.redirectIfNeeded(); - }, mode: function() { + this.setAppTitle(); this.redirectIfNeeded(); } }, @@ -123,6 +121,9 @@ class App extends Vue { }); } }); + + this.setAppTitle(); + this.redirectIfNeeded(); } toggleCollapse() { @@ -201,15 +202,18 @@ class App extends Vue { } redirectIfNeeded() { - if ((this.mode == 'reader' || this.mode == 'omnireader') && (this.rootRoute != '/reader')) { + if ((this.mode == 'reader' || this.mode == 'omnireader') && (!this.isReaderActive)) { //старый url const search = window.location.search.substr(1); - const url = search.split('url=')[1] || ''; + const s = search.split('url='); + const url = s[1] || ''; + const q = utils.parseQuery(s[0] || ''); if (url) { - window.location = `/#/reader?url=${url}`; - } else { - this.$router.replace('/reader'); + q.url = decodeURIComponent(url); } + + window.history.replaceState({}, '', '/'); + this.$router.replace({ path: '/reader', query: q }); } //yandex-метрика для omnireader diff --git a/client/components/Reader/ProgressPage/ProgressPage.vue b/client/components/Reader/ProgressPage/ProgressPage.vue index 7d1e9cb1..0ac1a0bc 100644 --- a/client/components/Reader/ProgressPage/ProgressPage.vue +++ b/client/components/Reader/ProgressPage/ProgressPage.vue @@ -94,6 +94,6 @@ class ProgressPage extends Vue { diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index b0caaf99..184e3c7d 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -1036,7 +1036,7 @@ class Reader extends Vue { overflow-x: auto; overflow-y: hidden; } - + .header { display: flex; justify-content: space-between; @@ -1064,6 +1064,10 @@ class Reader extends Vue { box-shadow: 3px 3px 5px black; } +.tool-button + .tool-button { + margin: 0 2px 0 2px; +} + .tool-button:hover { background-color: white; } diff --git a/client/components/Reader/SettingsPage/SettingsPage.vue b/client/components/Reader/SettingsPage/SettingsPage.vue index ec20e6f8..be2b07b6 100644 --- a/client/components/Reader/SettingsPage/SettingsPage.vue +++ b/client/components/Reader/SettingsPage/SettingsPage.vue @@ -871,9 +871,9 @@ class SettingsPage extends Vue { } .el-form-item { - padding: 0; - margin: 0; - margin-bottom: 5px; + padding: 0 !important; + margin: 0 !important; + margin-bottom: 5px !important; } .color-picked { diff --git a/client/components/Reader/share/bookManager.js b/client/components/Reader/share/bookManager.js index 9d2932af..294bd624 100644 --- a/client/components/Reader/share/bookManager.js +++ b/client/components/Reader/share/bookManager.js @@ -143,7 +143,6 @@ class BookManager { } } - async deflateWithProgress(data, callback) { const chunkSize = 128*1024; const deflator = new utils.pako.Deflate({level: 5}); @@ -178,6 +177,40 @@ class BookManager { return deflator.result; } + async inflateWithProgress(data, callback) { + const chunkSize = 64*1024; + const inflator = new utils.pako.Inflate({to: 'string'}); + + let chunkTotal = 1 + Math.floor(data.length/chunkSize); + let chunkNum = 0; + let perc = 0; + let prevPerc = 0; + + for (var i = 0; i < data.length; i += chunkSize) { + if ((i + chunkSize) >= data.length) { + inflator.push(data.subarray(i, i + chunkSize), true); + } else { + inflator.push(data.subarray(i, i + chunkSize), false); + } + chunkNum++; + + perc = Math.round(chunkNum/chunkTotal*100); + if (perc != prevPerc) { + callback(perc); + await utils.sleep(1); + prevPerc = perc; + } + } + + if (inflator.err) { + throw new Error(inflator.msg); + } + + callback(100); + + return inflator.result; + } + async addBook(newBook, callback) { if (!this.books) await this.init(); @@ -239,12 +272,18 @@ class BookManager { if (result && !result.parsed) { let data = await bmDataStore.getItem(`bmData-${meta.key}`); - callback(10); + callback(5); await utils.sleep(10); + let cb = (perc) => { + const p = 5 + Math.round(15*perc/100); + callback(p); + }; + if (result.dataCompressed) { try { - data = utils.pako.inflate(data, {to: 'string'}); + //data = utils.pako.inflate(data, {to: 'string'}); + data = await this.inflateWithProgress(data, cb); } catch (e) { this.delBook(meta); throw e; @@ -252,7 +291,7 @@ class BookManager { } callback(20); - const cb = (perc) => { + cb = (perc) => { const p = 20 + Math.round(80*perc/100); callback(p); }; diff --git a/client/components/Reader/versionHistory.js b/client/components/Reader/versionHistory.js index 795b2786..37e39480 100644 --- a/client/components/Reader/versionHistory.js +++ b/client/components/Reader/versionHistory.js @@ -1,4 +1,15 @@ export const versionHistory = [ +{ + showUntil: '2019-07-20', + header: '0.6.10 (2019-07-21)', + content: +` +