Compare commits

..

15 Commits

Author SHA1 Message Date
Book Pauk
f650124428 Merge branch 'release/0.7.1c' 2019-09-20 23:54:38 +07:00
Book Pauk
795d109c76 Поправил описание 2019-09-20 23:54:02 +07:00
Book Pauk
6868b3effc Добавлена кнопка offlineMode 2019-09-20 23:52:45 +07:00
Book Pauk
26747b7013 Небольшие поправки 2019-09-20 22:44:36 +07:00
Book Pauk
5198f8aa60 Merge tag '0.7.1b' into develop
0.7.1b
2019-09-20 22:18:09 +07:00
Book Pauk
552da48a32 Merge branch 'release/0.7.1b' 2019-09-20 22:17:58 +07:00
Book Pauk
db8a688620 Манипуляции с appcache 2019-09-20 22:17:28 +07:00
Book Pauk
3088028d05 Поправки багов 2019-09-20 21:45:29 +07:00
Book Pauk
fd62ef865d Merge tag '0.7.1a' into develop
0.7.1a
2019-09-20 20:37:33 +07:00
Book Pauk
ed74ed00ed Merge branch 'release/0.7.1a' 2019-09-20 20:37:23 +07:00
Book Pauk
741317aaaf К предыдущему 2019-09-20 20:36:31 +07:00
Book Pauk
9b6ecd4e6b Убрал вычисление диффа 2019-09-20 20:35:12 +07:00
Book Pauk
7863b3358e Убрал appcache 2019-09-20 20:34:42 +07:00
Book Pauk
e1be68ec3d Поправка бага 2019-09-20 20:20:11 +07:00
Book Pauk
a054186d4b Merge tag '0.7.1' into develop
Версия 0.7.1
2019-09-20 19:58:36 +07:00
8 changed files with 92 additions and 67 deletions

View File

@@ -55,6 +55,6 @@ module.exports = merge(baseWpConfig, {
filename: `${publicDir}/index.html` filename: `${publicDir}/index.html`
}), }),
new CopyWebpackPlugin([{from: `${clientDir}/assets/*`, to: `${publicDir}/`, flatten: true}]), new CopyWebpackPlugin([{from: `${clientDir}/assets/*`, to: `${publicDir}/`, flatten: true}]),
new AppCachePlugin({}) new AppCachePlugin({exclude: ['../index.html']})
] ]
}); });

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

@@ -71,9 +71,13 @@ class ServerStorage extends Vue {
} }
async bookManagerEvent(eventName, itemKey) { async bookManagerEvent(eventName, itemKey) {
if (eventName == 'recent-changed') { if (!this.serverSyncEnabled)
return;
if (eventName == 'recent-changed') {
if (itemKey) { if (itemKey) {
if (!this.recentDeltaInited) { if (!this.recentDeltaInited) {
await this.loadRecent();
this.warning('Функции сохранения на сервер пока недоступны'); this.warning('Функции сохранения на сервер пока недоступны');
return; return;
} }
@@ -172,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});
} }
@@ -358,78 +362,80 @@ class ServerStorage extends Vue {
} }
} }
async loadRecent(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;
//проверим ревизию на сервере
let revs = null;
try { try {
revs = await this.storageCheck({recent: {}, recentDelta: {}}); const oldRecentRev = bookManager.recentRev;
if (revs.state == 'success' && revs.items.recent.rev == oldRecentRev && const oldRecentDeltaRev = bookManager.recentDeltaRev;
revs.items.recentDelta.rev == oldRecentDeltaRev) { //проверим ревизию на сервере
if (!this.recentDeltaInited) let revs = null;
await this.initRecentDelta(); if (!skipRevCheck) {
try {
revs = await this.storageCheck({recent: {}, recentDelta: {}});
if (revs.state == 'success' && revs.items.recent.rev == oldRecentRev &&
revs.items.recentDelta.rev == oldRecentDeltaRev) {
if (!this.recentDeltaInited)
await this.initRecentDelta();
return;
}
} catch(e) {
this.error(`Ошибка соединения с сервером: ${e.message}`);
return;
}
}
let recent = null;
try {
recent = await this.storageGet({recent: {}, recentDelta: {}});
} catch(e) {
this.error(`Ошибка соединения с сервером: ${e.message}`);
return; return;
} }
} catch(e) {
this.error(`Ошибка соединения с сервером: ${e.message}`);
return;
}
let recent = null; if (recent.state == 'success') {
try { let recentDelta = recent.items.recentDelta;
if (revs.items.recent.rev != oldRecentRev) { recent = recent.items.recent;
recent = await this.storageGet({recent: {}, recentDelta: {}});
} else {
recent = await this.storageGet({recentDelta: {}});
recent.items.recent = {data: _.cloneDeep(bookManager.recent), rev: oldRecentRev};
}
} 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) {
@@ -482,7 +488,9 @@ class ServerStorage extends Vue {
} }
if (result.state == 'reject') { if (result.state == 'reject') {
await this.loadRecent(false);
await this.loadRecent(true, false);
this.warning(`Последние изменения отменены. Данные синхронизированы с сервером.`); this.warning(`Последние изменения отменены. Данные синхронизированы с сервером.`);
if (!recurse) { if (!recurse) {
this.savingRecent = false; this.savingRecent = false;
@@ -508,7 +516,9 @@ class ServerStorage extends Vue {
} }
if (result.state == 'reject') { if (result.state == 'reject') {
await this.loadRecent(false);
await this.loadRecent(true, false);
this.warning(`Последние изменения отменены. Данные синхронизированы с сервером.`); this.warning(`Последние изменения отменены. Данные синхронизированы с сервером.`);
if (!recurse) { if (!recurse) {
this.savingRecent = false; this.savingRecent = false;

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