Работа над ServerStorage
This commit is contained in:
@@ -57,6 +57,7 @@ class ServerStorage extends Vue {
|
||||
await this.serverStorageKeyChanged();
|
||||
}
|
||||
await this.currentProfileChanged();
|
||||
await this.loadRecent();
|
||||
}
|
||||
|
||||
async generateNewServerStorageKey() {
|
||||
@@ -363,8 +364,8 @@ class ServerStorage extends Vue {
|
||||
recent.data = {};
|
||||
|
||||
this.oldRecent = _.cloneDeep(recent.data);
|
||||
bookManager.setRecent(recent.data);
|
||||
bookManager.setRecentRev(recent.rev);
|
||||
await bookManager.setRecent(recent.data);
|
||||
await bookManager.setRecentRev(recent.rev);
|
||||
|
||||
this.notifySuccessIfNeeded(oldRev, recent.rev);
|
||||
} else {
|
||||
@@ -372,6 +373,50 @@ class ServerStorage extends Vue {
|
||||
}
|
||||
}
|
||||
|
||||
async saveRecent() {
|
||||
if (!this.serverSyncEnabled || this.savingRecent)
|
||||
return;
|
||||
|
||||
const bm = bookManager;
|
||||
|
||||
const diff = utils.getObjDiff(this.oldRecent, bm.recent);
|
||||
if (utils.isEmptyObjDiff(diff))
|
||||
return;
|
||||
|
||||
this.savingRecent = true;
|
||||
try {
|
||||
let result = {state: ''};
|
||||
let tries = 0;
|
||||
while (result.state != 'success' && tries < maxSetTries) {
|
||||
try {
|
||||
result = await this.storageSet({recent: {rev: bm.recentRev + 1, data: bm.recent}});
|
||||
} catch(e) {
|
||||
this.savingRecent = false;
|
||||
this.error(`Ошибка соединения с сервером: (${e.message}). Изменения не сохранены.`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (result.state == 'reject') {
|
||||
await this.loadRecent(true);
|
||||
const newRecent = utils.applyObjDiff(bm.recent, diff);
|
||||
await bm.setRecent(newRecent);
|
||||
}
|
||||
|
||||
tries++;
|
||||
}
|
||||
|
||||
if (tries >= maxSetTries) {
|
||||
console.error(result);
|
||||
this.error('Не удалось отправить данные на сервер. Данные не сохранены и могут быть перезаписаны.');
|
||||
} else {
|
||||
this.oldRecent = _.cloneDeep(bm.recent);
|
||||
await bm.setRecentRev(bm.recentRev + 1);
|
||||
}
|
||||
} finally {
|
||||
this.savingRecent = false;
|
||||
}
|
||||
}
|
||||
|
||||
async storageCheck(items) {
|
||||
return await this.storageApi('check', items);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user