From 3f6b46802174f010a366dcfd015e7becb5d43cba Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Fri, 22 Mar 2019 20:14:33 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=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/Reader.vue | 12 +++++++++- .../Reader/ServerStorage/ServerStorage.vue | 22 +++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index 41c1699c..6be8edb4 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -310,14 +310,24 @@ class Reader extends Vue { } if (eventName == 'recent-changed' || eventName == 'save-recent') { + if (this.historyActive) { + this.$refs.historyPage.updateTableData(); + } + (async() => { const oldBook = this.mostRecentBookReactive; const newBook = bookManager.mostRecentBook(); if (oldBook && newBook) { if (oldBook.key != newBook.key) { - await this.loadBook(newBook); + this.loadingBook = true; + try { + await this.loadBook(newBook); + } finally { + this.loadingBook = false; + } } else if (oldBook.bookPos != newBook.bookPos) { + while (this.loadingBook) await utils.sleep(100); this.bookPosChanged({bookPos: newBook.bookPos}); } } diff --git a/client/components/Reader/ServerStorage/ServerStorage.vue b/client/components/Reader/ServerStorage/ServerStorage.vue index ec34a106..8c3b7245 100644 --- a/client/components/Reader/ServerStorage/ServerStorage.vue +++ b/client/components/Reader/ServerStorage/ServerStorage.vue @@ -62,7 +62,7 @@ class ServerStorage extends Vue { await this.currentProfileChanged(); await this.loadRecent(); this.oldRecent = _.cloneDeep(bookManager.recent); - this.oldRecentLast = _.cloneDeep(bookManager.recentLast); + this.oldRecentLast = _.cloneDeep(bookManager.recentLast) || {}; } finally { this.inited = true; } @@ -71,7 +71,7 @@ class ServerStorage extends Vue { async generateNewServerStorageKey() { const key = utils.toBase58(utils.randomArray(32)); this.commit('reader/setServerStorageKey', key); - await this.serverStorageKeyChanged(); + await this.serverStorageKeyChanged(true); } async serverSyncEnabledChanged() { @@ -89,6 +89,8 @@ class ServerStorage extends Vue { await this.loadProfiles(force); this.checkCurrentProfile(); await this.loadRecent(); + if (force) + await this.saveRecent(); } } @@ -462,6 +464,7 @@ class ServerStorage extends Vue { const bm = bookManager; let recentLast = bm.recentLast; recentLast = (recentLast ? recentLast : {}); + let lastRev = bm.recentLastRev; const diff = utils.getObjDiff(this.oldRecentLast, recentLast); if (utils.isEmptyObjDiff(diff)) @@ -472,8 +475,19 @@ class ServerStorage extends Vue { let result = {state: ''}; let tries = 0; while (result.state != 'success' && tries < maxSetTries) { + if (force) { + try { + const revs = await this.storageCheck({recentLast: {}}); + if (revs.items.recentLast.rev) + lastRev = revs.items.recentLast.rev; + } catch(e) { + this.error(`Ошибка соединения с сервером: ${e.message}`); + return; + } + } + try { - result = await this.storageSet({recentLast: {rev: bm.recentLastRev + 1, data: recentLast}}, force); + result = await this.storageSet({recentLast: {rev: lastRev + 1, data: recentLast}}, force); } catch(e) { this.savingRecentLast = false; this.error(`Ошибка соединения с сервером: (${e.message}). Изменения не сохранены.`); @@ -494,7 +508,7 @@ class ServerStorage extends Vue { this.error('Не удалось отправить данные на сервер. Данные не сохранены и могут быть перезаписаны.'); } else { this.oldRecentLast = _.cloneDeep(recentLast); - await bm.setRecentLastRev(bm.recentLastRev + 1); + await bm.setRecentLastRev(lastRev + 1); } } finally { this.savingRecentLast = false;