Работа над ServerStorage
This commit is contained in:
@@ -57,6 +57,7 @@ class ServerStorage extends Vue {
|
|||||||
await this.serverStorageKeyChanged();
|
await this.serverStorageKeyChanged();
|
||||||
}
|
}
|
||||||
await this.currentProfileChanged();
|
await this.currentProfileChanged();
|
||||||
|
await this.loadRecent();
|
||||||
}
|
}
|
||||||
|
|
||||||
async generateNewServerStorageKey() {
|
async generateNewServerStorageKey() {
|
||||||
@@ -363,8 +364,8 @@ class ServerStorage extends Vue {
|
|||||||
recent.data = {};
|
recent.data = {};
|
||||||
|
|
||||||
this.oldRecent = _.cloneDeep(recent.data);
|
this.oldRecent = _.cloneDeep(recent.data);
|
||||||
bookManager.setRecent(recent.data);
|
await bookManager.setRecent(recent.data);
|
||||||
bookManager.setRecentRev(recent.rev);
|
await bookManager.setRecentRev(recent.rev);
|
||||||
|
|
||||||
this.notifySuccessIfNeeded(oldRev, recent.rev);
|
this.notifySuccessIfNeeded(oldRev, recent.rev);
|
||||||
} else {
|
} 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) {
|
async storageCheck(items) {
|
||||||
return await this.storageApi('check', items);
|
return await this.storageApi('check', items);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ class BookManager {
|
|||||||
this.recentLast = await bmCacheStore.getItem('recent-last');
|
this.recentLast = await bmCacheStore.getItem('recent-last');
|
||||||
if (this.recentLast)
|
if (this.recentLast)
|
||||||
this.recent[this.recentLast.key] = this.recentLast;
|
this.recent[this.recentLast.key] = this.recentLast;
|
||||||
this.recentRev = bmRecentStore.getItem('recent-rev') || 0;
|
this.recentRev = await bmRecentStore.getItem('recent-rev') || 0;
|
||||||
this.recentLastRev = bmRecentStore.getItem('recent-last-rev') || 0;
|
this.recentLastRev = await bmRecentStore.getItem('recent-last-rev') || 0;
|
||||||
this.books = Object.assign({}, this.booksCached);
|
this.books = Object.assign({}, this.booksCached);
|
||||||
|
|
||||||
this.recentChanged2 = true;
|
this.recentChanged2 = true;
|
||||||
@@ -355,20 +355,35 @@ class BookManager {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
setRecent(newRecent) {
|
async setRecent(newRecent) {
|
||||||
this.recent = 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) {
|
async setRecentRev(newRecentRev) {
|
||||||
this.recentLast = newRecentLast;
|
await bmRecentStore.setItem('recent-rev', newRecentRev);
|
||||||
}
|
|
||||||
|
|
||||||
setRecentRev(newRecentRev) {
|
|
||||||
bmRecentStore.setItem('recent-rev', newRecentRev);
|
|
||||||
this.recentRev = newRecentRev;
|
this.recentRev = newRecentRev;
|
||||||
}
|
}
|
||||||
|
|
||||||
setRecentLastRev(newRecentLastRev) {
|
async setRecentLast(newRecentLast) {
|
||||||
|
this.recentLast = newRecentLast;
|
||||||
|
}
|
||||||
|
|
||||||
|
async setRecentLastRev(newRecentLastRev) {
|
||||||
bmRecentStore.setItem('recent-last-rev', newRecentLastRev);
|
bmRecentStore.setItem('recent-last-rev', newRecentLastRev);
|
||||||
this.recentLastRev = newRecentLastRev;
|
this.recentLastRev = newRecentLastRev;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user