From 5a48b597b9331c93aa099d097c3c97cf1934b2f8 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Mon, 18 Mar 2019 16:47:35 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reader/ServerStorage/ServerStorage.vue | 49 ++++++++++++++----- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/client/components/Reader/ServerStorage/ServerStorage.vue b/client/components/Reader/ServerStorage/ServerStorage.vue index 807d11ee..16659fd1 100644 --- a/client/components/Reader/ServerStorage/ServerStorage.vue +++ b/client/components/Reader/ServerStorage/ServerStorage.vue @@ -134,7 +134,13 @@ class ServerStorage extends Vue { return; const setsId = `settings-${this.currentProfile}`; - let sets = await this.storageGet({[setsId]: {}}); + let sets = null; + try { + sets = await this.storageGet({[setsId]: {}}); + } catch(e) { + this.error(`Ошибка соединения с сервером: ${e.message}`); + return; + } if (sets.state == 'success') { const oldRev = this.settingsRev[setsId] || 0; @@ -143,7 +149,7 @@ class ServerStorage extends Vue { if (sets.rev == 0) sets.data = {}; - this.oldSettings = sets.data; + this.oldSettings = _.cloneDeep(sets.data); this.commit('reader/setSettings', sets.data); this.commit('reader/setSettingsRev', {[setsId]: sets.rev}); @@ -168,7 +174,13 @@ class ServerStorage extends Vue { let tries = 0; while (result.state != 'success' && tries < maxSetTries) { const oldRev = this.settingsRev[setsId] || 0; - result = await this.storageSet({[setsId]: {rev: oldRev + 1, data: this.settings}}); + try { + result = await this.storageSet({[setsId]: {rev: oldRev + 1, data: this.settings}}); + } catch(e) { + this.savingSettings = false; + this.error(`Ошибка соединения с сервером (${e.message}). Данные не сохранены и могут быть перезаписаны.`); + return; + } if (result.state == 'reject') { await this.loadSettings(); @@ -180,10 +192,11 @@ class ServerStorage extends Vue { } if (tries >= maxSetTries) { - this.commit('reader/setSettings', this.oldSettings); - this.error('Не удалось отправить данные на сервер'); + //отменять изменения не будем, просто предупредим + //this.commit('reader/setSettings', this.oldSettings); + this.error('Не удалось отправить настройки на сервер. Данные не сохранены и могут быть перезаписаны.'); } else { - this.oldSettings = this.settings; + this.oldSettings = _.cloneDeep(this.settings); this.commit('reader/setSettingsRev', {[setsId]: this.settingsRev[setsId] + 1}); } } finally { @@ -195,7 +208,13 @@ class ServerStorage extends Vue { if (!this.serverSyncEnabled) return; - let prof = await this.storageGet({'profiles': {}}); + let prof = null; + try { + prof = await this.storageGet({'profiles': {}}); + } catch(e) { + this.error(`Ошибка соединения с сервером: ${e.message}`); + return; + } if (prof.state == 'success') { const oldRev = this.profilesRev; @@ -204,7 +223,7 @@ class ServerStorage extends Vue { if (prof.rev == 0) prof.data = {}; - this.oldProfiles = prof.data; + this.oldProfiles = _.cloneDeep(prof.data); this.commit('reader/setProfiles', prof.data); this.commit('reader/setProfilesRev', prof.rev); @@ -227,7 +246,15 @@ class ServerStorage extends Vue { let result = {state: ''}; let tries = 0; while (result.state != 'success' && tries < maxSetTries) { - result = await this.storageSet({'profiles': {rev: this.profilesRev + 1, data: this.profiles}}); + try { + result = await this.storageSet({'profiles': {rev: this.profilesRev + 1, data: this.profiles}}); + } catch(e) { + this.savingProfiles = false; + this.commit('reader/setProfiles', this.oldProfiles); + this.checkCurrentProfile(); + this.error(`Ошибка соединения с сервером: (${e.message}). Изменения отменены.`); + return; + } if (result.state == 'reject') { await this.loadProfiles(); @@ -241,9 +268,9 @@ class ServerStorage extends Vue { if (tries >= maxSetTries) { this.commit('reader/setProfiles', this.oldProfiles); this.checkCurrentProfile(); - this.error('Не удалось отправить данные на сервер'); + this.error('Не удалось отправить данные на сервер. Изменения отменены.'); } else { - this.oldProfiles = this.profiles; + this.oldProfiles = _.cloneDeep(this.profiles); this.commit('reader/setProfilesRev', this.profilesRev + 1); } } finally {