Небольшие поправки
This commit is contained in:
@@ -77,6 +77,7 @@ class ServerStorage extends Vue {
|
|||||||
if (eventName == 'recent-changed') {
|
if (eventName == 'recent-changed') {
|
||||||
if (itemKey) {
|
if (itemKey) {
|
||||||
if (!this.recentDeltaInited) {
|
if (!this.recentDeltaInited) {
|
||||||
|
await this.loadRecent();
|
||||||
this.warning('Функции сохранения на сервер пока недоступны');
|
this.warning('Функции сохранения на сервер пока недоступны');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -362,74 +363,79 @@ class ServerStorage extends Vue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async loadRecent(skipRevCheck = false, doNotifySuccess = true) {
|
async loadRecent(skipRevCheck = false, doNotifySuccess = true) {
|
||||||
if (!this.keyInited || !this.serverSyncEnabled)
|
if (!this.keyInited || !this.serverSyncEnabled || this.loadingRecent)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const oldRecentRev = bookManager.recentRev;
|
this.loadingRecent = true;
|
||||||
const oldRecentDeltaRev = bookManager.recentDeltaRev;
|
try {
|
||||||
//проверим ревизию на сервере
|
const oldRecentRev = bookManager.recentRev;
|
||||||
let revs = null;
|
const oldRecentDeltaRev = bookManager.recentDeltaRev;
|
||||||
if (!skipRevCheck) {
|
//проверим ревизию на сервере
|
||||||
try {
|
let revs = null;
|
||||||
revs = await this.storageCheck({recent: {}, recentDelta: {}});
|
if (!skipRevCheck) {
|
||||||
if (revs.state == 'success' && revs.items.recent.rev == oldRecentRev &&
|
try {
|
||||||
revs.items.recentDelta.rev == oldRecentDeltaRev) {
|
revs = await this.storageCheck({recent: {}, recentDelta: {}});
|
||||||
if (!this.recentDeltaInited)
|
if (revs.state == 'success' && revs.items.recent.rev == oldRecentRev &&
|
||||||
await this.initRecentDelta();
|
revs.items.recentDelta.rev == oldRecentDeltaRev) {
|
||||||
|
if (!this.recentDeltaInited)
|
||||||
|
await this.initRecentDelta();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} catch(e) {
|
||||||
|
this.error(`Ошибка соединения с сервером: ${e.message}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let recent = null;
|
||||||
|
try {
|
||||||
|
recent = await this.storageGet({recent: {}, recentDelta: {}});
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
this.error(`Ошибка соединения с сервером: ${e.message}`);
|
this.error(`Ошибка соединения с сервером: ${e.message}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
let recent = null;
|
if (recent.state == 'success') {
|
||||||
try {
|
let recentDelta = recent.items.recentDelta;
|
||||||
recent = await this.storageGet({recent: {}, recentDelta: {}});
|
recent = recent.items.recent;
|
||||||
} catch(e) {
|
|
||||||
this.error(`Ошибка соединения с сервером: ${e.message}`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (recent.state == 'success') {
|
if (recent.rev == 0)
|
||||||
let recentDelta = recent.items.recentDelta;
|
recent.data = {};
|
||||||
recent = recent.items.recent;
|
|
||||||
|
|
||||||
if (recent.rev == 0)
|
let newRecent = {};
|
||||||
recent.data = {};
|
if (recentDelta && recentDelta.data) {
|
||||||
|
if (recentDelta.data.diff) {
|
||||||
let newRecent = {};
|
newRecent = recent.data;
|
||||||
if (recentDelta && recentDelta.data) {
|
const key = recentDelta.data.diff.key;
|
||||||
if (recentDelta.data.diff) {
|
if (newRecent[key])
|
||||||
newRecent = recent.data;
|
newRecent[key] = utils.applyObjDiff(newRecent[key], recentDelta.data.diff);
|
||||||
const key = recentDelta.data.diff.key;
|
} else {
|
||||||
if (newRecent[key])
|
newRecent = Object.assign(recent.data, recentDelta.data);
|
||||||
newRecent[key] = utils.applyObjDiff(newRecent[key], recentDelta.data.diff);
|
}
|
||||||
|
this.recentDelta = recentDelta.data;
|
||||||
} else {
|
} else {
|
||||||
newRecent = Object.assign(recent.data, recentDelta.data);
|
newRecent = recent.data;
|
||||||
|
this.recentDelta = {};
|
||||||
}
|
}
|
||||||
this.recentDelta = recentDelta.data;
|
|
||||||
|
this.recentDeltaInited = true;
|
||||||
|
|
||||||
|
if (!bookManager.loaded) {
|
||||||
|
this.warning('Ожидание загрузки списка книг перед синхронизацией');
|
||||||
|
while (!bookManager.loaded) await utils.sleep(100);
|
||||||
|
}
|
||||||
|
await bookManager.setRecent(newRecent);
|
||||||
|
await bookManager.setRecentRev(recent.rev);
|
||||||
|
await bookManager.setRecentDeltaRev(recentDelta.rev);
|
||||||
} else {
|
} else {
|
||||||
newRecent = recent.data;
|
this.warning(`Неверный ответ сервера: ${recent.state}`);
|
||||||
this.recentDelta = {};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.recentDeltaInited = true;
|
if (doNotifySuccess)
|
||||||
|
this.debouncedNotifySuccess();
|
||||||
if (!bookManager.loaded) {
|
} finally {
|
||||||
this.warning('Ожидание загрузки списка книг перед синхронизацией');
|
this.loadingRecent = false;
|
||||||
while (!bookManager.loaded) await utils.sleep(100);
|
|
||||||
}
|
|
||||||
await bookManager.setRecent(newRecent);
|
|
||||||
await bookManager.setRecentRev(recent.rev);
|
|
||||||
await bookManager.setRecentDeltaRev(recentDelta.rev);
|
|
||||||
} else {
|
|
||||||
this.warning(`Неверный ответ сервера: ${recent.state}`);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (doNotifySuccess)
|
|
||||||
this.debouncedNotifySuccess();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async saveRecent(itemKey, recurse) {
|
async saveRecent(itemKey, recurse) {
|
||||||
|
|||||||
Reference in New Issue
Block a user