Merge branch 'release/0.7.1c'

This commit is contained in:
Book Pauk
2019-09-20 23:54:38 +07:00
7 changed files with 77 additions and 56 deletions

View File

@@ -38,6 +38,9 @@
<el-tooltip v-show="showToolButton['recentBooks']" content="Открыть недавние" :open-delay="1000" effect="light"> <el-tooltip v-show="showToolButton['recentBooks']" content="Открыть недавние" :open-delay="1000" effect="light">
<el-button ref="recentBooks" class="tool-button" :class="buttonActiveClass('recentBooks')" @click="buttonClick('recentBooks')"><i class="el-icon-document"></i></el-button> <el-button ref="recentBooks" class="tool-button" :class="buttonActiveClass('recentBooks')" @click="buttonClick('recentBooks')"><i class="el-icon-document"></i></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip v-show="showToolButton['offlineMode']" content="Автономный режим (без интернета)" :open-delay="1000" effect="light">
<el-button ref="offlineMode" class="tool-button" :class="buttonActiveClass('offlineMode')" @click="buttonClick('offlineMode')"><i class="el-icon-connection"></i></el-button>
</el-tooltip>
</div> </div>
<el-tooltip content="Настроить" :open-delay="1000" effect="light"> <el-tooltip content="Настроить" :open-delay="1000" effect="light">
@@ -257,6 +260,7 @@ class Reader extends Vue {
searchActive = false; searchActive = false;
copyTextActive = false; copyTextActive = false;
recentBooksActive = false; recentBooksActive = false;
offlineModeActive = false;
settingsActive = false; settingsActive = false;
helpActive = false; helpActive = false;
clickMapActive = false; clickMapActive = false;
@@ -696,6 +700,11 @@ class Reader extends Vue {
} }
} }
offlineModeToggle() {
this.offlineModeActive = !this.offlineModeActive;
this.$refs.serverStorage.offlineModeActive = this.offlineModeActive;
}
settingsToggle() { settingsToggle() {
this.settingsActive = !this.settingsActive; this.settingsActive = !this.settingsActive;
if (this.settingsActive) { if (this.settingsActive) {
@@ -781,11 +790,14 @@ class Reader extends Vue {
case 'copyText': case 'copyText':
this.copyTextToggle(); this.copyTextToggle();
break; break;
case 'refresh':
this.refreshBook();
break;
case 'recentBooks': case 'recentBooks':
this.recentBooksToggle(); this.recentBooksToggle();
break; break;
case 'refresh': case 'offlineMode':
this.refreshBook(); this.offlineModeToggle();
break; break;
case 'settings': case 'settings':
this.settingsToggle(); this.settingsToggle();
@@ -806,6 +818,7 @@ class Reader extends Vue {
case 'search': case 'search':
case 'copyText': case 'copyText':
case 'recentBooks': case 'recentBooks':
case 'offlineMode':
case 'settings': case 'settings':
if (this[`${button}Active`]) if (this[`${button}Active`])
classResult = classActive; classResult = classActive;

View File

@@ -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;
} }
@@ -175,12 +176,12 @@ class ServerStorage extends Vue {
} }
warning(message) { warning(message) {
if (this.showServerStorageMessages) if (this.showServerStorageMessages && !this.offlineModeActive)
this.$notify.warning({message}); this.$notify.warning({message});
} }
error(message) { error(message) {
if (this.showServerStorageMessages) if (this.showServerStorageMessages && !this.offlineModeActive)
this.$notify.error({message}); this.$notify.error({message});
} }
@@ -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) {

View File

@@ -6,6 +6,7 @@ export const versionHistory = [
` `
<ul> <ul>
<li>исправления багов</li> <li>исправления багов</li>
<li>на панель управления добавлена кнопка "Автономный режим"</li>
</ul> </ul>
` `
}, },

View File

@@ -9,6 +9,7 @@ const toolButtons = [
{name: 'copyText', show: false, text: 'Скопировать текст со страницы'}, {name: 'copyText', show: false, text: 'Скопировать текст со страницы'},
{name: 'refresh', show: true, text: 'Принудительно обновить книгу'}, {name: 'refresh', show: true, text: 'Принудительно обновить книгу'},
{name: 'recentBooks', show: true, text: 'Открыть недавние'}, {name: 'recentBooks', show: true, text: 'Открыть недавние'},
{name: 'offlineMode', show: false, text: 'Автономный режим (без интернета)'},
]; ];
const fonts = [ const fonts = [

Binary file not shown.

File diff suppressed because one or more lines are too long