Работа над 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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user