Работа над ServerStorage

This commit is contained in:
Book Pauk
2019-03-22 11:58:14 +07:00
parent 2a79207427
commit f65a91dfed
2 changed files with 73 additions and 13 deletions

View File

@@ -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);
}

View File

@@ -36,8 +36,8 @@ class BookManager {
this.recentLast = await bmCacheStore.getItem('recent-last');
if (this.recentLast)
this.recent[this.recentLast.key] = this.recentLast;
this.recentRev = bmRecentStore.getItem('recent-rev') || 0;
this.recentLastRev = bmRecentStore.getItem('recent-last-rev') || 0;
this.recentRev = await bmRecentStore.getItem('recent-rev') || 0;
this.recentLastRev = await bmRecentStore.getItem('recent-last-rev') || 0;
this.books = Object.assign({}, this.booksCached);
this.recentChanged2 = true;
@@ -355,20 +355,35 @@ class BookManager {
return result;
}
setRecent(newRecent) {
this.recent = newRecent;
async setRecent(newRecent) {
//this.recent = newRecent;
const mergedRecent = _.cloneDeep(this.recent);
Object.assign(mergedRecent, newRecent);
for (const rec of Object.values(mergedRecent)) {
await bmRecentStore.setItem(rec.key, rec);
}
this.recent = mergedRecent;
await bmCacheStore.setItem('recent', this.recent);
this.recentLast = null;
await bmCacheStore.setItem('recent-last', null);
this.mostRecentCached = null;
this.emit('recent-changed');
}
setRecentLast(newRecentLast) {
this.recentLast = newRecentLast;
}
setRecentRev(newRecentRev) {
bmRecentStore.setItem('recent-rev', newRecentRev);
async setRecentRev(newRecentRev) {
await bmRecentStore.setItem('recent-rev', newRecentRev);
this.recentRev = newRecentRev;
}
setRecentLastRev(newRecentLastRev) {
async setRecentLast(newRecentLast) {
this.recentLast = newRecentLast;
}
async setRecentLastRev(newRecentLastRev) {
bmRecentStore.setItem('recent-last-rev', newRecentLastRev);
this.recentLastRev = newRecentLastRev;
}