From a2c393b06b82b6676bd2aaa8780d7da0e90513d0 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 22 Aug 2019 15:37:15 +0700 Subject: [PATCH 01/41] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3,=20=D1=83=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=89=D0=B5=D0=BD=D0=B8=D0=B5,=20=D0=BD=D0=B0=D1=87=D0=B0?= =?UTF-8?q?=D0=BB=D0=BE=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=BA?= =?UTF-8?q?=D0=B8=20ServerStorage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reader/HistoryPage/HistoryPage.vue | 46 +++- client/components/Reader/Reader.vue | 31 ++- client/components/Reader/share/bookManager.js | 244 +++++------------- 3 files changed, 123 insertions(+), 198 deletions(-) diff --git a/client/components/Reader/HistoryPage/HistoryPage.vue b/client/components/Reader/HistoryPage/HistoryPage.vue index e63b6ec6..a3432872 100644 --- a/client/components/Reader/HistoryPage/HistoryPage.vue +++ b/client/components/Reader/HistoryPage/HistoryPage.vue @@ -3,7 +3,8 @@
{ - this.$refs.input.focus(); + //this.$refs.input.focus(); }); + (async() => {//отбражение подгрузки списка + await utils.sleep(1000); + if (this.bookManagerLoaded) + this.updateTableData(); + else { + let i = 0; + let j = 5; + while (i < 500 && !this.bookManagerLoaded) { + if (i % j == 0) { + bookManager.sortedRecentCached = null; + this.updateTableData(100); + j *= 2; + } + + await utils.sleep(100); + i++; + } + } + })(); + } + + bookManagerEvent(eventName) { + if (eventName == 'load-stored-finish') { + this.updateTableData(); + this.bookManagerLoaded = true; + } } rowKey(row) { return row.key; } - updateTableData() { + updateTableData(limit) { let result = []; + this.loading = !!limit; const sorted = bookManager.getSortedRecent(); + for (let i = 0; i < sorted.length; i++) { const book = sorted[i]; if (book.deleted) continue; + if (limit && result.length >= limit) + break; + let d = new Date(); d.setTime(book.touchTime); - const t = formatDate(d).split(' '); + const t = utils.formatDate(d).split(' '); let perc = ''; let textLen = ''; diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index 184e3c7d..cf8d1af7 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -73,7 +73,7 @@ - + { + const recent = this.mostRecentBook(); + if (!newValue && !this.loading && recent && !await bookManager.hasBookParsed(recent)) { + this.loadBook(recent); + } + })(); }, }, }) @@ -216,7 +218,7 @@ class Reader extends Vue { } }, 500); - this.debouncedSaveRecent = _.debounce(async() => { + /*this.debouncedSaveRecent = _.debounce(async() => { const serverStorage = this.$refs.serverStorage; while (!serverStorage.inited) await utils.sleep(1000); await serverStorage.saveRecent(); @@ -226,7 +228,7 @@ class Reader extends Vue { const serverStorage = this.$refs.serverStorage; while (!serverStorage.inited) await utils.sleep(1000); await serverStorage.saveRecentLast(); - }, 1000); + }, 1000);*/ document.addEventListener('fullscreenchange', () => { this.fullScreenActive = (document.fullscreenElement !== null); @@ -379,8 +381,8 @@ class Reader extends Vue { this.debouncedUpdateRoute(); } - async bookManagerEvent(eventName) { - const serverStorage = this.$refs.serverStorage; + async bookManagerEvent(/*eventName*/) { + /*const serverStorage = this.$refs.serverStorage; if (eventName == 'load-meta-finish') { serverStorage.init(); const result = await bookManager.cleanRecentBooks(); @@ -415,7 +417,7 @@ class Reader extends Vue { } else { this.debouncedSaveRecent(); } - } + }*/ } get toolBarActive() { @@ -759,7 +761,8 @@ class Reader extends Vue { //акивируем страницу с текстом this.$nextTick(async() => { const last = this.mostRecentBookReactive; - const isParsed = bookManager.hasBookParsed(last); + const isParsed = await bookManager.hasBookParsed(last); + if (!isParsed) { this.$root.$emit('set-app-title'); return; @@ -793,7 +796,7 @@ class Reader extends Vue { // уже просматривается сейчас const lastBook = (this.$refs.page ? this.$refs.page.lastBook : null); - if (!opts.force && lastBook && lastBook.url == url && bookManager.hasBookParsed(lastBook)) { + if (!opts.force && lastBook && lastBook.url == url && await bookManager.hasBookParsed(lastBook)) { this.loaderActive = false; return; } diff --git a/client/components/Reader/share/bookManager.js b/client/components/Reader/share/bookManager.js index 294bd624..7598c82a 100644 --- a/client/components/Reader/share/bookManager.js +++ b/client/components/Reader/share/bookManager.js @@ -18,46 +18,30 @@ const bmRecentStore = localForage.createInstance({ name: 'bmRecentStore' }); -const bmCacheStore = localForage.createInstance({ - name: 'bmCacheStore' -}); - class BookManager { async init(settings) { + this.loaded = false; this.settings = settings; this.eventListeners = []; + this.books = {}; + this.recent = {}; - //bmCacheStore нужен только для ускорения загрузки читалки - this.booksCached = await bmCacheStore.getItem('books'); - if (!this.booksCached) - this.booksCached = {}; - this.recent = await bmCacheStore.getItem('recent'); - this.recentLast = await bmCacheStore.getItem('recent-last'); + this.recentLast = await bmRecentStore.getItem('recent-last'); if (this.recentLast) this.recent[this.recentLast.key] = this.recentLast; - this.recentRev = await bmRecentStore.getItem('recent-rev') || 0; - this.recentLastRev = await bmRecentStore.getItem('recent-last-rev') || 0; - this.recentLastDiffRev = await bmRecentStore.getItem('recent-last-diff-rev') || 0; - this.books = Object.assign({}, this.booksCached); - this.recentChanged2 = true; + this.recentChanged = true; - if (!this.books || !this.recent) { - this.books = {}; - this.recent = {}; - await this.loadMeta(true); - } else { - this.loadMeta(false); - } + this.loadStored();//no await } - //долгая загрузка из хранилища, - //хранение в отдельных записях дает относительно - //нормальное поведение при нескольких вкладках с читалкой в браузере - async loadMeta(immediate) { - if (!immediate) - await utils.sleep(2000); + //Долгая асинхронная загрузка из хранилища. + //Хранение в отдельных записях дает относительно + //нормальное поведение при нескольких вкладках с читалкой в браузере. + async loadStored() { + //даем время для загрузки последней читаемой книги, чтобы не блокировать приложение + await utils.sleep(2000); let len = await bmMetaStore.length(); for (let i = 0; i < len; i++) { @@ -68,6 +52,7 @@ class BookManager { let meta = await bmMetaStore.getItem(key); if (_.isObject(meta)) { + //уже может быть распарсена книга const oldBook = this.books[meta.key]; this.books[meta.key] = meta; @@ -80,22 +65,19 @@ class BookManager { } } - //"ленивая" загрузка - (async() => { - let key = null; - len = await bmRecentStore.length(); - for (let i = 0; i < len; i++) { - key = await bmRecentStore.key(i); - if (key) { - let r = await bmRecentStore.getItem(key); - if (_.isObject(r) && r.key) { - this.recent[r.key] = r; - } - } else { - await bmRecentStore.removeItem(key); + let key = null; + len = await bmRecentStore.length(); + for (let i = 0; i < len; i++) { + key = await bmRecentStore.key(i); + if (key) { + let r = await bmRecentStore.getItem(key); + if (_.isObject(r) && r.key) { + this.recent[r.key] = r; } + } else { + await bmRecentStore.removeItem(key); } - })(); + } //размножение для дебага /*if (key) { @@ -106,17 +88,10 @@ class BookManager { }*/ await this.cleanBooks(); + await this.cleanRecentBooks(); - //очистка позже - //await this.cleanRecentBooks(); - - this.booksCached = {}; - for (const key in this.books) { - this.booksCached[key] = this.metaOnly(this.books[key]); - } - await bmCacheStore.setItem('books', this.booksCached); - await bmCacheStore.setItem('recent', this.recent); - this.emit('load-meta-finish'); + this.loaded = true; + this.emit('load-stored-finish'); } async cleanBooks() { @@ -136,7 +111,7 @@ class BookManager { } if (size > maxDataSize && toDel) { - await this._delBook(toDel); + await this.delBook(toDel); } else { break; } @@ -211,9 +186,7 @@ class BookManager { return inflator.result; } - async addBook(newBook, callback) { - if (!this.books) - await this.init(); + async addBook(newBook, callback) { let meta = {url: newBook.url, path: newBook.path}; meta.key = this.keyFromUrl(meta.url); meta.addTime = Date.now(); @@ -233,43 +206,53 @@ class BookManager { let data = newBook.data; if (result.dataCompressed) { - //data = utils.pako.deflate(data, {level: 9}); + //data = utils.pako.deflate(data, {level: 5}); data = await this.deflateWithProgress(data, cb2); result.dataCompressedLength = data.byteLength; } callback(95); this.books[meta.key] = result; - this.booksCached[meta.key] = this.metaOnly(result); await bmMetaStore.setItem(`bmMeta-${meta.key}`, this.metaOnly(result)); await bmDataStore.setItem(`bmData-${meta.key}`, data); - await bmCacheStore.setItem('books', this.booksCached); callback(100); return result; } - hasBookParsed(meta) { + async hasBookParsed(meta) { if (!this.books) return false; if (!meta.url) return false; if (!meta.key) meta.key = this.keyFromUrl(meta.url); + let book = this.books[meta.key]; + + if (!book && !this.loaded) { + book = await bmDataStore.getItem(`bmMeta-${meta.key}`); + if (book) + this.books[meta.key] = book; + } + return !!(book && book.parsed); } async getBook(meta, callback) { - if (!this.books) - await this.init(); let result = undefined; if (!meta.key) meta.key = this.keyFromUrl(meta.url); result = this.books[meta.key]; + if (!result) { + result = await bmDataStore.getItem(`bmMeta-${meta.key}`); + if (result) + this.books[meta.key] = result; + } + if (result && !result.parsed) { let data = await bmDataStore.getItem(`bmData-${meta.key}`); callback(5); @@ -303,27 +286,14 @@ class BookManager { return result; } - async _delBook(meta) { + async delBook(meta) { await bmMetaStore.removeItem(`bmMeta-${meta.key}`); await bmDataStore.removeItem(`bmData-${meta.key}`); delete this.books[meta.key]; - delete this.booksCached[meta.key]; - } - - async delBook(meta) { - if (!this.books) - await this.init(); - - await this._delBook(meta); - - await bmCacheStore.setItem('books', this.booksCached); } async parseBook(meta, data, callback) { - if (!this.books) - await this.init(); - const parsed = new BookParser(this.settings); const parsedMeta = await parsed.parse(data, callback); @@ -347,9 +317,8 @@ class BookManager { return utils.stringToHex(url); } + //-- recent -------------------------------------------------------------- async setRecentBook(value) { - if (!this.recent) - await this.init(); const result = this.metaOnly(value); result.touchTime = Date.now(); result.deleted = 0; @@ -366,66 +335,51 @@ class BookManager { await bmRecentStore.setItem(result.key, result); - //кэшируем, аккуратно - let saveRecent = false; - if (!(this.recentLast && this.recentLast.key == result.key)) { - await bmCacheStore.setItem('recent', this.recent); - saveRecent = true; - } this.recentLast = result; - await bmCacheStore.setItem('recent-last', this.recentLast); + await bmRecentStore.setItem('recent-last', this.recentLast); - this.mostRecentCached = result; - this.recentChanged2 = true; - - if (saveRecent) - this.emit('save-recent'); - this.emit('recent-changed'); + this.recentChanged = true; return result; } async getRecentBook(value) { - if (!this.recent) - await this.init(); - return this.recent[value.key]; + let result = this.recent[value.key]; + if (!result) { + result = await bmRecentStore.getItem(value.key); + this.recent[value.key] = result; + } + return result; } async delRecentBook(value) { - if (!this.recent) - await this.init(); - this.recent[value.key].deleted = 1; await bmRecentStore.setItem(value.key, this.recent[value.key]); - await bmCacheStore.setItem('recent', this.recent); - this.mostRecentCached = null; - this.recentChanged2 = true; + this.recentLast = null; + await bmRecentStore.setItem('recent-last', this.recentLast); - this.emit('save-recent'); + this.recentChanged = true; } async cleanRecentBooks() { - if (!this.recent) - await this.init(); - const sorted = this.getSortedRecent(); let isDel = false; for (let i = 1000; i < sorted.length; i++) { await bmRecentStore.removeItem(sorted[i].key); delete this.recent[sorted[i].key]; + await bmRecentStore.removeItem(sorted[i].key); isDel = true; } this.sortedRecentCached = null; - await bmCacheStore.setItem('recent', this.recent); return isDel; } mostRecentBook() { - if (this.mostRecentCached) { - return this.mostRecentCached; + if (this.recentLast) { + return this.recentLast; } let max = 0; @@ -437,12 +391,14 @@ class BookManager { result = book; } } - this.mostRecentCached = result; + this.recentLast = result; + bmRecentStore.setItem('recent-last', this.recentLast);//no await + return result; } getSortedRecent() { - if (!this.recentChanged2 && this.sortedRecentCached) { + if (!this.recentChanged && this.sortedRecentCached) { return this.sortedRecentCached; } @@ -451,78 +407,10 @@ class BookManager { result.sort((a, b) => b.touchTime - a.touchTime); this.sortedRecentCached = result; - this.recentChanged2 = false; + this.recentChanged = false; return result; } - async setRecent(value) { - const mergedRecent = _.cloneDeep(this.recent); - - Object.assign(mergedRecent, value); - const newRecent = {}; - - //"ленивое" обновление хранилища - (async() => { - for (const rec of Object.values(mergedRecent)) { - if (rec.key) { - await bmRecentStore.setItem(rec.key, rec); - await utils.sleep(1); - } - } - })(); - - for (const rec of Object.values(mergedRecent)) { - if (rec.key) { - newRecent[rec.key] = rec; - } - } - - this.recent = newRecent; - await bmCacheStore.setItem('recent', this.recent); - - this.recentLast = null; - await bmCacheStore.setItem('recent-last', this.recentLast); - - this.mostRecentCached = null; - this.emit('recent-changed'); - } - - async setRecentRev(value) { - await bmRecentStore.setItem('recent-rev', value); - this.recentRev = value; - } - - async setRecentLast(value) { - if (!value.key) - value = null; - - this.recentLast = value; - await bmCacheStore.setItem('recent-last', this.recentLast); - if (value && value.key) { - //гарантия переключения книги - const mostRecent = this.mostRecentBook(); - if (mostRecent) - this.recent[mostRecent.key].touchTime = value.touchTime - 1; - - this.recent[value.key] = value; - await bmRecentStore.setItem(value.key, value); - await bmCacheStore.setItem('recent', this.recent); - } - - this.mostRecentCached = null; - this.emit('recent-changed'); - } - - async setRecentLastRev(value) { - await bmRecentStore.setItem('recent-last-rev', value); - this.recentLastRev = value; - } - - async setRecentLastDiffRev(value) { - await bmRecentStore.setItem('recent-last-diff-rev', value); - this.recentLastDiffRev = value; - } - addEventListener(listener) { if (this.eventListeners.indexOf(listener) < 0) this.eventListeners.push(listener); From 0c654d9346700c3f9ce8496eac34e87948181877 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 22 Aug 2019 20:01:48 +0700 Subject: [PATCH 02/41] =?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 --- .../Reader/HistoryPage/HistoryPage.vue | 2 +- client/components/Reader/Reader.vue | 14 +++++------ client/components/Reader/share/bookManager.js | 25 +++++++++++++------ 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/client/components/Reader/HistoryPage/HistoryPage.vue b/client/components/Reader/HistoryPage/HistoryPage.vue index a3432872..f8f533d3 100644 --- a/client/components/Reader/HistoryPage/HistoryPage.vue +++ b/client/components/Reader/HistoryPage/HistoryPage.vue @@ -4,7 +4,7 @@ = 0; i--) { const key = await bmMetaStore.key(i); const keySplit = key.split('-'); @@ -67,7 +67,7 @@ class BookManager { let key = null; len = await bmRecentStore.length(); - for (let i = 0; i < len; i++) { + for (let i = len - 1; i >= 0; i--) { key = await bmRecentStore.key(i); if (key) { let r = await bmRecentStore.getItem(key); @@ -339,6 +339,7 @@ class BookManager { await bmRecentStore.setItem('recent-last', this.recentLast); this.recentChanged = true; + this.emit('recent-changed'); return result; } @@ -355,10 +356,11 @@ class BookManager { this.recent[value.key].deleted = 1; await bmRecentStore.setItem(value.key, this.recent[value.key]); - this.recentLast = null; - await bmRecentStore.setItem('recent-last', this.recentLast); - - this.recentChanged = true; + if (this.recentLast.key == value.key) { + this.recentLast = null; + await bmRecentStore.setItem('recent-last', this.recentLast); + } + this.emit('recent-changed'); } async cleanRecentBooks() { @@ -374,6 +376,7 @@ class BookManager { this.sortedRecentCached = null; + this.emit('recent-changed'); return isDel; } @@ -394,6 +397,7 @@ class BookManager { this.recentLast = result; bmRecentStore.setItem('recent-last', this.recentLast);//no await + this.emit('recent-changed'); return result; } @@ -423,8 +427,13 @@ class BookManager { } emit(eventName, value) { - for (const listener of this.eventListeners) - listener(eventName, value); + if (this.eventListeners) { + (async() => { + await utils.sleep(1); + for (const listener of this.eventListeners) + listener(eventName, value); + })(); + } } } From 696f434c90616584d09643c27bdcc49adea04a0e Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 22 Aug 2019 23:37:55 +0700 Subject: [PATCH 03/41] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7?= =?UTF-8?q?=D0=BA=D0=B8=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B5=D0=B4=D0=B0=D0=B2=D0=BD=D0=B8=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reader/HistoryPage/HistoryPage.vue | 49 ++++++++++++------- client/components/Reader/Reader.vue | 2 +- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/client/components/Reader/HistoryPage/HistoryPage.vue b/client/components/Reader/HistoryPage/HistoryPage.vue index f8f533d3..9e653abe 100644 --- a/client/components/Reader/HistoryPage/HistoryPage.vue +++ b/client/components/Reader/HistoryPage/HistoryPage.vue @@ -122,28 +122,33 @@ export default @Component({ class HistoryPage extends Vue { loading = false; search = null; - tableData = null; + tableData = []; + key = 0; created() { } init() { - bookManager.addEventListener(this.bookManagerEvent); - this.updateTableData(5); this.$nextTick(() => { //this.$refs.input.focus(); }); (async() => {//отбражение подгрузки списка - await utils.sleep(1000); - if (this.bookManagerLoaded) - this.updateTableData(); - else { + if (this.initing) + return; + this.initing = true; + + await this.updateTableData(5); + await utils.sleep(200); + await this.updateTableData(15); + await utils.sleep(800); + + if (!bookManager.loaded) { let i = 0; let j = 5; - while (i < 500 && !this.bookManagerLoaded) { + while (i < 500 && !bookManager.loaded) { if (i % j == 0) { bookManager.sortedRecentCached = null; - this.updateTableData(100); + await this.updateTableData(100); j *= 2; } @@ -151,21 +156,19 @@ class HistoryPage extends Vue { i++; } } + await this.updateTableData(); + this.initing = false; })(); } - bookManagerEvent(eventName) { - if (eventName == 'load-stored-finish') { - this.updateTableData(); - this.bookManagerLoaded = true; - } - } - rowKey(row) { - return row.key; + return row.rowKey; } - updateTableData(limit) { + async updateTableData(limit) { + while (this.updating) await utils.sleep(100); + this.updating = true; + this.key++; let result = []; this.loading = !!limit; @@ -227,6 +230,7 @@ class HistoryPage extends Vue { url: book.url, path: book.path, key: book.key, + rowKey: book.key + this.key.toString(), }); if (result.length >= 100) break; @@ -241,7 +245,16 @@ class HistoryPage extends Vue { item.desc.author.toLowerCase().includes(search.toLowerCase()) }); + /*for (let i = 0; i < result.length; i++) { + if (!_.isEqual(this.tableData[i], result[i])) { + this.$set(this.tableData, i, result[i]); + await utils.sleep(10); + } + } + if (this.tableData.length > result.length) + this.tableData.splice(result.length);*/ this.tableData = result; + this.updating = false; } headerCellStyle(cell) { diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index da88b62c..8d39a83d 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -392,7 +392,7 @@ class Reader extends Vue { if (eventName == 'recent-changed') { if (this.historyActive) { - this.$refs.historyPage.updateTableData(); + await this.$refs.historyPage.updateTableData(); } const oldBook = this.mostRecentBookReactive; From 036547e2606214ced738c2fe6668ca254efe4c21 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 22 Aug 2019 23:53:16 +0700 Subject: [PATCH 04/41] =?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 --- client/components/Reader/HistoryPage/HistoryPage.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/components/Reader/HistoryPage/HistoryPage.vue b/client/components/Reader/HistoryPage/HistoryPage.vue index 9e653abe..cf3a00b9 100644 --- a/client/components/Reader/HistoryPage/HistoryPage.vue +++ b/client/components/Reader/HistoryPage/HistoryPage.vue @@ -137,9 +137,9 @@ class HistoryPage extends Vue { return; this.initing = true; - await this.updateTableData(5); + await this.updateTableData(10); await utils.sleep(200); - await this.updateTableData(15); + await this.updateTableData(20); await utils.sleep(800); if (!bookManager.loaded) { From 4fe5b4465513873bcb6e56782c77991086ff719a Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Fri, 23 Aug 2019 12:48:32 +0700 Subject: [PATCH 05/41] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/HistoryPage/HistoryPage.vue | 9 +++++---- client/components/Reader/share/bookManager.js | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/client/components/Reader/HistoryPage/HistoryPage.vue b/client/components/Reader/HistoryPage/HistoryPage.vue index cf3a00b9..49e576d3 100644 --- a/client/components/Reader/HistoryPage/HistoryPage.vue +++ b/client/components/Reader/HistoryPage/HistoryPage.vue @@ -137,12 +137,13 @@ class HistoryPage extends Vue { return; this.initing = true; - await this.updateTableData(10); + await this.updateTableData(3); await utils.sleep(200); - await this.updateTableData(20); - await utils.sleep(800); - if (!bookManager.loaded) { + if (bookManager.loaded) { + await this.updateTableData(10); + await utils.sleep(1800); + } else { let i = 0; let j = 5; while (i < 500 && !bookManager.loaded) { diff --git a/client/components/Reader/share/bookManager.js b/client/components/Reader/share/bookManager.js index 4caa8c1a..496e8c80 100644 --- a/client/components/Reader/share/bookManager.js +++ b/client/components/Reader/share/bookManager.js @@ -90,6 +90,7 @@ class BookManager { await this.cleanBooks(); await this.cleanRecentBooks(); + this.recentChanged = true; this.loaded = true; this.emit('load-stored-finish'); } From 086c353eff799483bd1d5ffced05643e6efa75e1 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Fri, 23 Aug 2019 13:32:18 +0700 Subject: [PATCH 06/41] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B1=D0=B0=D0=B3=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/share/bookManager.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/client/components/Reader/share/bookManager.js b/client/components/Reader/share/bookManager.js index 496e8c80..a4fc8f63 100644 --- a/client/components/Reader/share/bookManager.js +++ b/client/components/Reader/share/bookManager.js @@ -377,7 +377,8 @@ class BookManager { this.sortedRecentCached = null; - this.emit('recent-changed'); + if (isDel) + this.emit('recent-changed'); return isDel; } @@ -385,6 +386,7 @@ class BookManager { if (this.recentLast) { return this.recentLast; } + const oldRecentLast = this.recentLast; let max = 0; let result = null; @@ -398,7 +400,8 @@ class BookManager { this.recentLast = result; bmRecentStore.setItem('recent-last', this.recentLast);//no await - this.emit('recent-changed'); + if (this.recentLast !== oldRecentLast) + this.emit('recent-changed'); return result; } @@ -431,8 +434,10 @@ class BookManager { if (this.eventListeners) { (async() => { await utils.sleep(1); - for (const listener of this.eventListeners) + for (const listener of this.eventListeners) { + //console.log(eventName); listener(eventName, value); + } })(); } } From 63861789de0e8fcf623e3729c65c0729bf3f2638 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Fri, 23 Aug 2019 13:38:23 +0700 Subject: [PATCH 07/41] =?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 --- client/components/Reader/HistoryPage/HistoryPage.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/components/Reader/HistoryPage/HistoryPage.vue b/client/components/Reader/HistoryPage/HistoryPage.vue index 49e576d3..87ebc299 100644 --- a/client/components/Reader/HistoryPage/HistoryPage.vue +++ b/client/components/Reader/HistoryPage/HistoryPage.vue @@ -142,7 +142,8 @@ class HistoryPage extends Vue { if (bookManager.loaded) { await this.updateTableData(10); - await utils.sleep(1800); + if (bookManager.getSortedRecent().length > 10) + await utils.sleep(1800); } else { let i = 0; let j = 5; From 2eab9c283713328bccf21b0fe12c7d5c6b44fef6 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Fri, 23 Aug 2019 15:38:12 +0700 Subject: [PATCH 08/41] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B0=D0=BD=D0=B8=D0=BC=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=BB=D0=B8=D1=81=D1=82=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/TextPage/DrawHelper.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/client/components/Reader/TextPage/DrawHelper.js b/client/components/Reader/TextPage/DrawHelper.js index d6f08c74..d9bf569e 100644 --- a/client/components/Reader/TextPage/DrawHelper.js +++ b/client/components/Reader/TextPage/DrawHelper.js @@ -350,20 +350,18 @@ export default class DrawHelper { page2.style.background = backgroundColor; if (isDown) { - page2.style.transformOrigin = '10%'; + page2.style.transformOrigin = '5%'; await sleep(30); - page2.style.transformOrigin = '0%'; page2.style.transition = `${duration}ms ease-in-out`; - page2.style.transform = `rotateY(-120deg)`; + page2.style.transform = `rotateY(-120deg) translateX(${this.w/4}px)`; await animation2Finish(duration); } else { - page2.style.transformOrigin = '90%'; + page2.style.transformOrigin = '95%'; await sleep(30); - page2.style.transformOrigin = '100%'; page2.style.transition = `${duration}ms ease-in-out`; - page2.style.transform = `rotateY(120deg)`; + page2.style.transform = `rotateY(120deg) translateX(-${this.w/4}px)`; await animation2Finish(duration); } From 755c6b92da251ef14bcd833e6d2abaf28d4be43a Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Fri, 23 Aug 2019 18:55:14 +0700 Subject: [PATCH 09/41] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/HistoryPage/HistoryPage.vue | 5 +---- client/components/Reader/Reader.vue | 6 +++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/client/components/Reader/HistoryPage/HistoryPage.vue b/client/components/Reader/HistoryPage/HistoryPage.vue index 87ebc299..86eed2a1 100644 --- a/client/components/Reader/HistoryPage/HistoryPage.vue +++ b/client/components/Reader/HistoryPage/HistoryPage.vue @@ -123,7 +123,6 @@ class HistoryPage extends Vue { loading = false; search = null; tableData = []; - key = 0; created() { } @@ -164,13 +163,12 @@ class HistoryPage extends Vue { } rowKey(row) { - return row.rowKey; + return row.key; } async updateTableData(limit) { while (this.updating) await utils.sleep(100); this.updating = true; - this.key++; let result = []; this.loading = !!limit; @@ -232,7 +230,6 @@ class HistoryPage extends Vue { url: book.url, path: book.path, key: book.key, - rowKey: book.key + this.key.toString(), }); if (result.length >= 100) break; diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index 8d39a83d..57baaaa8 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -73,7 +73,7 @@ - + Date: Fri, 23 Aug 2019 19:48:55 +0700 Subject: [PATCH 10/41] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=20compactTextPerc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/Reader/SettingsPage/SettingsPage.vue | 13 +++++++++++++ client/components/Reader/TextPage/TextPage.vue | 1 + client/components/Reader/share/BookParser.js | 9 ++++++--- client/store/modules/reader.js | 1 + 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/client/components/Reader/SettingsPage/SettingsPage.vue b/client/components/Reader/SettingsPage/SettingsPage.vue index be2b07b6..0705530a 100644 --- a/client/components/Reader/SettingsPage/SettingsPage.vue +++ b/client/components/Reader/SettingsPage/SettingsPage.vue @@ -284,6 +284,19 @@ По ширине Перенос по слогам + + + Компактность + + + + + + Убирать пустые строки diff --git a/client/components/Reader/TextPage/TextPage.vue b/client/components/Reader/TextPage/TextPage.vue index 1527b170..cde207d2 100644 --- a/client/components/Reader/TextPage/TextPage.vue +++ b/client/components/Reader/TextPage/TextPage.vue @@ -221,6 +221,7 @@ class TextPage extends Vue { this.parsed.showInlineImagesInCenter = this.showInlineImagesInCenter; this.parsed.imageHeightLines = this.imageHeightLines; this.parsed.imageFitWidth = this.imageFitWidth; + this.parsed.compactTextPerc = this.compactTextPerc; } //scrolling page diff --git a/client/components/Reader/share/BookParser.js b/client/components/Reader/share/BookParser.js index 292eade1..6deb6e68 100644 --- a/client/components/Reader/share/BookParser.js +++ b/client/components/Reader/share/BookParser.js @@ -620,7 +620,8 @@ export default class BookParser { para.parsed.addEmptyParagraphs === this.addEmptyParagraphs && para.parsed.showImages === this.showImages && para.parsed.imageHeightLines === this.imageHeightLines && - para.parsed.imageFitWidth === this.imageFitWidth + para.parsed.imageFitWidth === this.imageFitWidth && + para.parsed.compactTextPerc === this.compactTextPerc ) return para.parsed; @@ -635,6 +636,7 @@ export default class BookParser { showImages: this.showImages, imageHeightLines: this.imageHeightLines, imageFitWidth: this.imageFitWidth, + compactTextPerc: this.compactTextPerc, visible: !( (this.cutEmptyParagraphs && para.cut) || (para.addIndex > this.addEmptyParagraphs) @@ -665,6 +667,7 @@ export default class BookParser { let style = {}; let ofs = 0;//смещение от начала параграфа para.offset let imgW = 0; + const compactWidth = this.measureText('W', {})*this.compactTextPerc/100; // тут начинается самый замес, перенос по слогам и стилизация, а также изображения for (const part of parts) { style = part.style; @@ -749,7 +752,7 @@ export default class BookParser { p = (style.space ? p + parsed.p*style.space : p); let w = this.measureText(str, style) + p; let wordTail = word; - if (w > parsed.w && prevStr != '') { + if (w > parsed.w + compactWidth && prevStr != '') { if (parsed.wordWrap) {//по слогам let slogi = this.splitToSlogi(word); @@ -762,7 +765,7 @@ export default class BookParser { for (let k = 0; k < slogiLen - 1; k++) { let slog = slogi[0]; let ww = this.measureText(s + slog + (slog[slog.length - 1] == '-' ? '' : '-'), style) + p; - if (ww <= parsed.w) { + if (ww <= parsed.w + compactWidth) { s += slog; ss += slog; } else diff --git a/client/store/modules/reader.js b/client/store/modules/reader.js index 40bf14f2..af575c91 100644 --- a/client/store/modules/reader.js +++ b/client/store/modules/reader.js @@ -176,6 +176,7 @@ const settingDefaults = { blinkCachedLoad: true, showImages: true, showInlineImagesInCenter: true, + compactTextPerc: 0, imageHeightLines: 100, imageFitWidth: true, showServerStorageMessages: true, From 01880f445609cdc6a578b778a703e389ed9096c0 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 28 Aug 2019 10:48:04 +0700 Subject: [PATCH 11/41] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5=200.7?= =?UTF-8?q?.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/versionHistory.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/client/components/Reader/versionHistory.js b/client/components/Reader/versionHistory.js index 37e39480..524c81fb 100644 --- a/client/components/Reader/versionHistory.js +++ b/client/components/Reader/versionHistory.js @@ -1,4 +1,18 @@ export const versionHistory = [ +{ + showUntil: '2019-08-10', + header: '0.7.0 (2019-08-??)', + content: +` +
    +
  • добавлена возможность загрузки и работы читалки в оффлайн-режиме (при отсутствии интернета)
  • +
  • упрощение механизма серверной синхронизации с целью повышения надежности и избавления от багов
  • +
  • мелкие изменения в интерфейсе, улучшение позиционирования окон на смартфонах
  • +
  • добавлен параметр "Компактность" в раздел "Вид"->"Текст" в настройках
  • +
+` +}, + { showUntil: '2019-07-20', header: '0.6.10 (2019-07-21)', From bdb5d90b1d19ad4ca394e201386d7545ba33a051 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 28 Aug 2019 11:03:09 +0700 Subject: [PATCH 12/41] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20HistoryPage?= =?UTF-8?q?=20->=20RecentBooksPage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/Reader.vue | 44 +++++++++---------- .../RecentBooksPage.vue} | 4 +- client/store/modules/reader.js | 2 +- 3 files changed, 25 insertions(+), 25 deletions(-) rename client/components/Reader/{HistoryPage/HistoryPage.vue => RecentBooksPage/RecentBooksPage.vue} (99%) diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index 57baaaa8..a381de32 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -35,8 +35,8 @@
- - + +
@@ -69,7 +69,7 @@ @stop-text-search="stopTextSearch"> - + @@ -106,7 +106,7 @@ import ProgressPage from './ProgressPage/ProgressPage.vue'; import SetPositionPage from './SetPositionPage/SetPositionPage.vue'; import SearchPage from './SearchPage/SearchPage.vue'; import CopyTextPage from './CopyTextPage/CopyTextPage.vue'; -import HistoryPage from './HistoryPage/HistoryPage.vue'; +import RecentBooksPage from './RecentBooksPage/RecentBooksPage.vue'; import SettingsPage from './SettingsPage/SettingsPage.vue'; import HelpPage from './HelpPage/HelpPage.vue'; import ClickMapPage from './ClickMapPage/ClickMapPage.vue'; @@ -126,7 +126,7 @@ export default @Component({ SetPositionPage, SearchPage, CopyTextPage, - HistoryPage, + RecentBooksPage, SettingsPage, HelpPage, ClickMapPage, @@ -175,7 +175,7 @@ class Reader extends Vue { setPositionActive = false; searchActive = false; copyTextActive = false; - historyActive = false; + recentBooksActive = false; settingsActive = false; helpActive = false; clickMapActive = false; @@ -391,8 +391,8 @@ class Reader extends Vue { }*/ if (eventName == 'recent-changed') { - if (this.historyActive) { - await this.$refs.historyPage.updateTableData(); + if (this.recentBooksActive) { + await this.$refs.recentBooksPage.updateTableData(); } const oldBook = this.mostRecentBookReactive; @@ -478,7 +478,7 @@ class Reader extends Vue { closeAllTextPages() { this.setPositionActive = false; this.copyTextActive = false; - this.historyActive = false; + this.recentBooksActive = false; this.settingsActive = false; this.stopScrolling(); this.stopSearch(); @@ -570,14 +570,14 @@ class Reader extends Vue { } } - historyToggle() { - this.historyActive = !this.historyActive; - if (this.historyActive) { + recentBooksToggle() { + this.recentBooksActive = !this.recentBooksActive; + if (this.recentBooksActive) { this.closeAllTextPages(); - this.$refs.historyPage.init(); - this.historyActive = true; + this.$refs.recentBooksPage.init(); + this.recentBooksActive = true; } else { - this.historyActive = false; + this.recentBooksActive = false; } } @@ -662,8 +662,8 @@ class Reader extends Vue { case 'copyText': this.copyTextToggle(); break; - case 'history': - this.historyToggle(); + case 'recentBooks': + this.recentBooksToggle(); break; case 'refresh': this.refreshBook(); @@ -686,7 +686,7 @@ class Reader extends Vue { case 'scrolling': case 'search': case 'copyText': - case 'history': + case 'recentBooks': case 'settings': if (this[`${button}Active`]) classResult = classActive; @@ -714,7 +714,7 @@ class Reader extends Vue { case 'copyText': classResult = classDisabled; break; - case 'history': + case 'recentBooks': case 'refresh': if (!this.mostRecentBook()) classResult = classDisabled; @@ -957,8 +957,8 @@ class Reader extends Vue { if (!handled && this.settingsActive) handled = this.$refs.settingsPage.keyHook(event); - if (!handled && this.historyActive) - handled = this.$refs.historyPage.keyHook(event); + if (!handled && this.recentBooksActive) + handled = this.$refs.recentBooksPage.keyHook(event); if (!handled && this.setPositionActive) handled = this.$refs.setPositionPage.keyHook(event); @@ -1008,7 +1008,7 @@ class Reader extends Vue { this.refreshBook(); break; case 'KeyX': - this.historyToggle(); + this.recentBooksToggle(); event.preventDefault(); event.stopPropagation(); break; diff --git a/client/components/Reader/HistoryPage/HistoryPage.vue b/client/components/Reader/RecentBooksPage/RecentBooksPage.vue similarity index 99% rename from client/components/Reader/HistoryPage/HistoryPage.vue rename to client/components/Reader/RecentBooksPage/RecentBooksPage.vue index 86eed2a1..ff84aae2 100644 --- a/client/components/Reader/HistoryPage/HistoryPage.vue +++ b/client/components/Reader/RecentBooksPage/RecentBooksPage.vue @@ -119,7 +119,7 @@ export default @Component({ } }, }) -class HistoryPage extends Vue { +class RecentBooksPage extends Vue { loading = false; search = null; tableData = []; @@ -301,7 +301,7 @@ class HistoryPage extends Vue { } close() { - this.$emit('history-toggle'); + this.$emit('recent-books-toggle'); } keyHook(event) { diff --git a/client/store/modules/reader.js b/client/store/modules/reader.js index af575c91..394bbd71 100644 --- a/client/store/modules/reader.js +++ b/client/store/modules/reader.js @@ -8,7 +8,7 @@ const toolButtons = [ {name: 'search', show: true, text: 'Найти в тексте'}, {name: 'copyText', show: false, text: 'Скопировать текст со страницы'}, {name: 'refresh', show: true, text: 'Принудительно обновить книгу'}, - {name: 'history', show: true, text: 'Открыть недавние'}, + {name: 'recentBooks', show: true, text: 'Открыть недавние'}, ]; const fonts = [ From 682a044f32efdac08b51a3b0b7a0e8957c6ced55 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 28 Aug 2019 16:48:16 +0700 Subject: [PATCH 13/41] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20=D0=B4=D0=B2=D0=B8=D0=B3=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BE=D0=BA=D0=BD=D0=B0,=20=D0=BD=D0=B5=D0=B1=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D1=88=D0=BE=D0=B5=20=D0=BE=D0=B1=D0=BB=D0=B0=D0=B3?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=D0=B6=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reader/CopyTextPage/CopyTextPage.vue | 35 +--- .../RecentBooksPage/RecentBooksPage.vue | 193 ++++++++---------- .../Reader/SettingsPage/SettingsPage.vue | 1 - .../components/Reader/TextPage/TextPage.vue | 13 +- client/components/share/Window.vue | 126 +++++++++++- client/main.js | 1 + 6 files changed, 217 insertions(+), 152 deletions(-) diff --git a/client/components/Reader/CopyTextPage/CopyTextPage.vue b/client/components/Reader/CopyTextPage/CopyTextPage.vue index b8af6fc6..c1ce34b5 100644 --- a/client/components/Reader/CopyTextPage/CopyTextPage.vue +++ b/client/components/Reader/CopyTextPage/CopyTextPage.vue @@ -1,17 +1,13 @@ \ No newline at end of file diff --git a/client/main.js b/client/main.js index 435575c4..b486c7b3 100644 --- a/client/main.js +++ b/client/main.js @@ -6,6 +6,7 @@ import './element'; import App from './components/App.vue'; //Vue.config.productionTip = false; +Vue.prototype.$isMobileDevice = /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent); new Vue({ router, From 4f87508834f73e0190bc19c7913c4dd43a2bb2a4 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 28 Aug 2019 17:14:58 +0700 Subject: [PATCH 14/41] =?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 --- .../components/Reader/HelpPage/HelpPage.vue | 66 +++++++------------ .../PasteTextPage/PasteTextPage.vue | 53 ++++++--------- 2 files changed, 42 insertions(+), 77 deletions(-) diff --git a/client/components/Reader/HelpPage/HelpPage.vue b/client/components/Reader/HelpPage/HelpPage.vue index 98d6aafb..815e3ac3 100644 --- a/client/components/Reader/HelpPage/HelpPage.vue +++ b/client/components/Reader/HelpPage/HelpPage.vue @@ -1,32 +1,27 @@ From de13cfb555884a239e4aa767c9123026133545a8 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 28 Aug 2019 17:30:29 +0700 Subject: [PATCH 15/41] =?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 --- .../Reader/SearchPage/SearchPage.vue | 61 ++++++------------- client/components/share/Window.vue | 6 +- 2 files changed, 25 insertions(+), 42 deletions(-) diff --git a/client/components/Reader/SearchPage/SearchPage.vue b/client/components/Reader/SearchPage/SearchPage.vue index 6f021826..5c933c24 100644 --- a/client/components/Reader/SearchPage/SearchPage.vue +++ b/client/components/Reader/SearchPage/SearchPage.vue @@ -1,28 +1,24 @@ + + \ No newline at end of file From c8852d9a8ead7dbc7e3ffe3954c20c9921f256ac Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 7 Sep 2019 20:40:48 +0700 Subject: [PATCH 40/41] =?UTF-8?q?=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=88=D0=B0=D1=8F=20=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/ServerStorage/ServerStorage.vue | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/components/Reader/ServerStorage/ServerStorage.vue b/client/components/Reader/ServerStorage/ServerStorage.vue index 21153461..20abd508 100644 --- a/client/components/Reader/ServerStorage/ServerStorage.vue +++ b/client/components/Reader/ServerStorage/ServerStorage.vue @@ -374,6 +374,10 @@ class ServerStorage extends Vue { } + if (!bookManager.loaded) { + this.warning('Ожидание загрузки списка книг перед синхронизацией'); + while (!bookManager.loaded) await utils.sleep(100); + } await bookManager.setRecent(newRecent); await bookManager.setRecentRev(recent.rev); await bookManager.setRecentDiffRev(recentDiff.rev); From ab1981559b4e472e8f8924f3f366274e77c098fe Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 7 Sep 2019 21:59:00 +0700 Subject: [PATCH 41/41] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B1=D0=B0=D0=B3=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/Reader.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index f0685e2f..70e2c6ea 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -821,7 +821,7 @@ class Reader extends Vue { break; } - if (this.activePage == 'LoaderPage' || !this.mostRecentBook()) { + if (this.activePage == 'LoaderPage' || !this.mostRecentBookReactive) { switch (button) { case 'undoAction': case 'redoAction': @@ -833,7 +833,7 @@ class Reader extends Vue { break; case 'recentBooks': case 'refresh': - if (!this.mostRecentBook()) + if (!this.mostRecentBookReactive) classResult = classDisabled; break; }