Explorar o código

Merge branch 'release/0.7.1c'

Book Pauk %!s(int64=5) %!d(string=hai) anos
pai
achega
f650124428

+ 15 - 2
client/components/Reader/Reader.vue

@@ -38,6 +38,9 @@
                     <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-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>
 
                 <el-tooltip content="Настроить" :open-delay="1000" effect="light">
@@ -257,6 +260,7 @@ class Reader extends Vue {
     searchActive = false;
     copyTextActive = false;
     recentBooksActive = false;
+    offlineModeActive = false;
     settingsActive = false;
     helpActive = false;
     clickMapActive = false;
@@ -696,6 +700,11 @@ class Reader extends Vue {
         }
     }
 
+    offlineModeToggle() {
+        this.offlineModeActive = !this.offlineModeActive;
+        this.$refs.serverStorage.offlineModeActive = this.offlineModeActive;
+    }
+
     settingsToggle() {
         this.settingsActive = !this.settingsActive;
         if (this.settingsActive) {
@@ -781,11 +790,14 @@ class Reader extends Vue {
             case 'copyText':
                 this.copyTextToggle();
                 break;
+            case 'refresh':
+                this.refreshBook();
+                break;
             case 'recentBooks':
                 this.recentBooksToggle();
                 break;
-            case 'refresh':
-                this.refreshBook();
+            case 'offlineMode':
+                this.offlineModeToggle();
                 break;
             case 'settings':
                 this.settingsToggle();
@@ -806,6 +818,7 @@ class Reader extends Vue {
             case 'search':
             case 'copyText':
             case 'recentBooks':
+            case 'offlineMode':
             case 'settings':
                 if (this[`${button}Active`])
                     classResult = classActive;

+ 60 - 54
client/components/Reader/ServerStorage/ServerStorage.vue

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

+ 1 - 0
client/components/Reader/versionHistory.js

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

+ 1 - 0
client/store/modules/reader.js

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

BIN=BIN
client/theme/fonts/element-icons.ttf


BIN=BIN
client/theme/fonts/element-icons.woff


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
client/theme/icon.css


Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio