فهرست منبع

Merge branch 'release/0.11.3'

Book Pauk 3 سال پیش
والد
کامیت
d58a2c065a

+ 1 - 0
.eslintrc

@@ -31,6 +31,7 @@
     "vue/max-attributes-per-line": "off",
     "vue/html-self-closing": "off",
     "vue/no-v-html": "off",
+    "vue/no-v-model-argument": "off",
 
     "strict": 0,
     "indent": [0, 4, {

+ 4 - 3
build/webpack.base.config.js

@@ -5,11 +5,12 @@ const { VueLoaderPlugin } = require('vue-loader');
 const clientDir = path.resolve(__dirname, '../client');
 
 module.exports = {
-    /*resolve: {
+    resolve: {
         alias: {
-            vue: '@vue/compat'
+            ws: false,
+            //vue: '@vue/compat'
         }
-    },*/    
+    },
     entry: [`${clientDir}/main.js`],
     output: {
         publicPath: '/app/',

+ 1 - 1
client/api/reader.js

@@ -219,7 +219,7 @@ class Reader {
         const state = response.state;
         if (!state)
             throw new Error('Неверный ответ api');
-        if (response.state == 'error') {
+        if (state == 'error') {
             throw new Error(response.error);
         }
 

+ 5 - 5
client/components/ExternalLibs/BookmarkSettings/BookmarkSettings.vue

@@ -55,16 +55,16 @@
 
                 <div class="col fit tree">
                     <div v-show="nodes.length" class="checkbox-tick-all">
-                        <q-checkbox v-model="tickAll" size="36px" label="Выбрать все" @input="makeTickAll" />
+                        <q-checkbox v-model="tickAll" size="36px" label="Выбрать все" @update:model-value="makeTickAll" />
                     </div>
                     <q-tree
+                        v-model:selected="selected"
+                        v-model:ticked="ticked"
+                        v-model:expanded="expanded"
                         class="q-my-xs"
                         :nodes="nodes"
                         node-key="key"
                         tick-strategy="leaf"
-                        v-model:selected="selected"
-                        v-model:ticked="ticked"
-                        v-model:expanded="expanded"
                         selected-color="black"
                         :filter="search"
                         no-nodes-label="Закладок пока нет"
@@ -97,7 +97,7 @@ const componentOptions = {
         Window,
     },
     watch: {
-        ticked: function() {
+        ticked() {
             this.checkAllTicked();
         },
     }    

+ 2 - 2
client/components/Reader/HelpPage/DonateHelpPage/DonateHelpPage.vue

@@ -19,7 +19,7 @@
                 </div>
             </div>
 
-            <div class="address">                
+            <!--div class="address">                
                 <img class="logo" src="./assets/paypal.png">
                 <div class="para">
                     {{ paypalAddress }}
@@ -29,7 +29,7 @@
                         </q-tooltip>                    
                     </q-icon>
                 </div>
-            </div>
+            </div-->
 
             <div class="address">                
                 <img class="logo" src="./assets/bitcoin.png">

+ 5 - 4
client/components/Reader/HelpPage/VersionHistoryPage/VersionHistoryPage.vue

@@ -33,14 +33,15 @@ class VersionHistoryPage {
 
     mounted() {
         let vh = [];
-        for (const version of versionHistory) {
-            vh.push(version.header);
+        for (const v of versionHistory) {
+            vh.push(`${v.version} (${v.releaseDate})`);
         }
         this.versionHeader = vh;
 
         let vc = [];
-        for (const version of versionHistory) {
-            vc.push({key: version.header, content: 'Версия ' + version.header + version.content});
+        for (const v of versionHistory) {
+            let header = `${v.version} (${v.releaseDate})`;
+            vc.push({key: header, content: 'Версия ' + header + v.content});
         }
         this.versionContent = vc;
     }

+ 1 - 3
client/components/Reader/LoaderPage/LoaderPage.vue

@@ -114,9 +114,7 @@ class LoaderPage {
     }
 
     get clientVersion() {
-        let v = versionHistory[0].header;
-        v = v.split(' ')[0];
-        return v;
+        return versionHistory[0].version;
     }
 
     submitUrl() {

+ 1 - 3
client/components/Reader/Reader.vue

@@ -525,9 +525,7 @@ class Reader {
     }
 
     get clientVersion() {
-        let v = versionHistory[0].header;
-        v = v.split(' ')[0];
-        return v;
+        return versionHistory[0].version;
     }
 
     get routeParamUrl() {

+ 22 - 12
client/components/Reader/ReaderDialogs/ReaderDialogs.vue

@@ -5,12 +5,17 @@
                 Что нового:
             </template>
 
-            <div style="line-height: 20px" v-html="whatsNewContent"></div>
+            <div style="line-height: 20px; min-width: 300px">
+                <div v-html="whatsNewContent"></div>
+            </div>
+
+            <span class="clickable" style="font-size: 13px" @click="openVersionHistory">Посмотреть историю версий</span>
 
-            <span class="clickable" @click="openVersionHistory">Посмотреть историю версий</span>
-            <span slot="footer">
-                <q-btn class="q-px-md" dense no-caps @click="whatsNewDisable">Больше не показывать</q-btn>
-            </span>
+            <template #footer>
+                <q-btn class="q-px-md" dense no-caps @click="whatsNewDisable">
+                    Больше не показывать
+                </q-btn>
+            </template>
         </Dialog>
 
         <Dialog ref="dialog2" v-model="donationVisible">
@@ -55,11 +60,13 @@
                 </div>
             </div>
 
-            <span slot="footer">
+            <template #footer>
                 <span class="clickable row justify-end" style="font-size: 60%; color: grey" @click="donationDialogDisable">Больше не показывать</span>                        
                 <br>
-                <q-btn class="q-px-sm" dense no-caps @click="donationDialogRemind">Напомнить позже</q-btn>
-            </span>
+                <q-btn class="q-px-sm" dense no-caps @click="donationDialogRemind">
+                    Напомнить позже
+                </q-btn>
+            </template>
         </Dialog>
     </div>
 </template>
@@ -112,9 +119,9 @@ class ReaderDialogs {
         const whatsNew = versionHistory[0];
         if (this.showWhatsNewDialog &&
             whatsNew.showUntil >= utils.formatDate(new Date(), 'coDate') &&
-            whatsNew.header != this.whatsNewContentHash) {
+            this.whatsNewHeader != this.whatsNewContentHash) {
             await utils.sleep(2000);
-            this.whatsNewContent = 'Версия ' + whatsNew.header + whatsNew.content;
+            this.whatsNewContent = 'Версия ' + this.whatsNewHeader + whatsNew.content;
             this.whatsNewVisible = true;
         }
     }
@@ -160,8 +167,11 @@ class ReaderDialogs {
 
     whatsNewDisable() {
         this.whatsNewVisible = false;
-        const whatsNew = versionHistory[0];
-        this.commit('reader/setWhatsNewContentHash', whatsNew.header);
+        this.commit('reader/setWhatsNewContentHash', this.whatsNewHeader);
+    }
+
+    get whatsNewHeader() {
+        return `${versionHistory[0].version} (${versionHistory[0].releaseDate})`;
     }
 
     get mode() {

+ 2 - 2
client/components/Reader/SettingsPage/OthersTab.inc

@@ -52,7 +52,7 @@
     </q-checkbox>
 </div>
 
-<div class="item row">
+<!--div class="item row">
     <div class="label-6">Уведомление</div>
     <q-checkbox size="xs" v-model="showDonationDialog2020">
         Показывать "Оплатим хостинг вместе"
@@ -60,7 +60,7 @@
             Показывать уведомление "Оплатим хостинг вместе"
         </q-tooltip>
     </q-checkbox>
-</div>
+</div-->
 
 <!---------------------------------------------->
 <div class="part-header">Другое</div>

+ 140 - 43
client/components/Reader/versionHistory.js

@@ -1,73 +1,99 @@
 export const versionHistory = [
 {
+    version: '0.11.3',
+    releaseDate: '2022-03-29',
+    showUntil: '2022-03-28',
+    content:
+`
+<ul>
+    <li>исправления багов</li>
+</ul>
+
+`
+},
+
+{
+    version: '0.11.2',
+    releaseDate: '2022-01-11',
     showUntil: '2022-01-10',
-    header: '0.11.2 (2022-01-11)',
     content:
 `
 <ul>
-    <li>переход на JembaDb вместо SQLite</li>
+    <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.11.1',
+    releaseDate: '2021-12-03',
     showUntil: '2021-12-02',
-    header: '0.11.1 (2021-12-03)',
     content:
 `
 <ul>
     <li>переход на JembaDb вместо SQLite</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.11.0',
+    releaseDate: '2021-11-18',
     showUntil: '2021-11-17',
-    header: '0.11.0 (2021-11-18)',
     content:
 `
 <ul>
     <li>переход на Vue 3</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.10.3',
+    releaseDate: '2021-10-24',
     showUntil: '2021-10-23',
-    header: '0.10.3 (2021-10-24)',
     content:
 `
 <ul>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.10.2',
+    releaseDate: '2021-10-19',
     showUntil: '2021-10-18',
-    header: '0.10.2 (2021-10-19)',
     content:
 `
 <ul>
     <li>актуализация версий пакетов и стека используемых технологий</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.10.1',
+    releaseDate: '2021-10-10',
     showUntil: '2021-10-09',
-    header: '0.10.1 (2021-10-10)',
     content:
 `
 <ul>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.10.0',
+    releaseDate: '2021-02-09',
     showUntil: '2021-02-16',
-    header: '0.10.0 (2021-02-09)',
     content:
 `
 <ul>
@@ -76,12 +102,14 @@ export const versionHistory = [
     <li>в настройки добавлена возможность загрузки пользовательских обоев (пока без синхронизации)</li>
     <li>немного улучшен парсинг fb2</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.9.12',
+    releaseDate: '2020-12-18',
     showUntil: '2020-12-17',
-    header: '0.9.12 (2020-12-18)',
     content:
 `
 <ul>
@@ -90,23 +118,27 @@ export const versionHistory = [
     <li>добавлена кнопка для быстрого доступа к настройкам конвертирования</li>
     <li>улучшения работы конвертеров</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.9.11',
+    releaseDate: '2020-12-09',
     showUntil: '2020-12-08',
-    header: '0.9.11 (2020-12-09)',
     content:
 `
 <ul>
     <li>оптимизации, улучшения работы конвертеров</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.9.10',
+    releaseDate: '2020-12-03',
     showUntil: '2020-12-10',
-    header: '0.9.10 (2020-12-03)',
     content:
 `
 <ul>
@@ -114,69 +146,81 @@ export const versionHistory = [
     <li>добавлена поддержка Rar-архивов</li>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.9.9',
+    releaseDate: '2020-11-21',
     showUntil: '2020-11-20',
-    header: '0.9.9 (2020-11-21)',
     content:
 `
 <ul>
     <li>оптимизации, исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.9.8',
+    releaseDate: '2020-11-13',
     showUntil: '2020-11-12',
-    header: '0.9.8 (2020-11-13)',
     content:
 `
 <ul>
     <li>добавлено окно "Оглавление/закладки"</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.9.7',
+    releaseDate: '2020-11-12',
     showUntil: '2020-11-11',
-    header: '0.9.7 (2020-11-12)',
     content:
 `
 <ul>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.9.6',
+    releaseDate: '2020-11-06',
     showUntil: '2020-11-05',
-    header: '0.9.6 (2020-11-06)',
     content:
 `
 <ul>
     <li>завершена работа над новым окном "Библиотека"</li>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.9.5',
+    releaseDate: '2020-11-01',
     showUntil: '2020-10-31',
-    header: '0.9.5 (2020-11-01)',
     content:
 `
 <ul>
     <li>на панель инструментов добавлена новая кнопка "Обновить с разбиением на параграфы"</li>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.9.4',
+    releaseDate: '2020-10-29',
     showUntil: '2020-10-28',
-    header: '0.9.4 (2020-10-29)',
     content:
 `
 <ul>
@@ -184,23 +228,27 @@ export const versionHistory = [
     <li>для liberama.top добавлено новое окно: "Библиотека"</li>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.9.3',
+    releaseDate: '2020-05-21',
     showUntil: '2020-05-20',
-    header: '0.9.3 (2020-05-21)',
     content:
 `
 <ul>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.9.2',
+    releaseDate: '2020-03-15',
     showUntil: '2020-04-25',
-    header: '0.9.2 (2020-03-15)',
     content:
 `
 <ul>
@@ -208,119 +256,139 @@ export const versionHistory = [
     <li>переход на Service Worker вместо AppCache для автономного режима работы</li>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.9.1',
+    releaseDate: '2020-03-03',
     showUntil: '2020-03-02',
-    header: '0.9.1 (2020-03-03)',
     content:
 `
 <ul>
     <li>улучшение работы серверной части</li>
     <li>незначительные изменения интерфейса</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.9.0',
+    releaseDate: '2020-02-26',
     showUntil: '2020-02-25',
-    header: '0.9.0 (2020-02-26)',
     content:
 `
 <ul>
     <li>переход на UI-фреймфорк Quasar</li>
     <li>незначительные изменения интерфейса</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.8.4',
+    releaseDate: '2020-02-06',
     showUntil: '2020-02-05',
-    header: '0.8.4 (2020-02-06)',
     content:
 `
 <ul>
     <li>добавлен paypal-адрес для пожертвований</li>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.8.3',
+    releaseDate: '2020-01-28',
     showUntil: '2020-01-27',
-    header: '0.8.3 (2020-01-28)',
     content:
 `
 <ul>
     <li>добавлено всплывающее окно с акцией "Оплатим хостинг вместе"</li>
     <li>внутренние оптимизации</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.8.2',
+    releaseDate: '2020-01-20',
     showUntil: '2020-01-19',
-    header: '0.8.2 (2020-01-20)',
     content:
 `
 <ul>
     <li>внутренние оптимизации</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.8.1',
+    releaseDate: '2020-01-07',
     showUntil: '2020-01-06',
-    header: '0.8.1 (2020-01-07)',
     content:
 `
 <ul>
     <li>добавлена частичная поддержка формата FB3</li>
     <li>исправлен баг "Request path contains unescaped characters"</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.8.0',
+    releaseDate: '2020-01-02',
     showUntil: '2020-01-05',
-    header: '0.8.0 (2020-01-02)',
     content:
 `
 <ul>
     <li>окончательный переход на https</li>
     <li>код проекта теперь Open Source: <a href="https://github.com/bookpauk/liberama" target="_blank">https://github.com/bookpauk/liberama</a></li>
 </ul>
+
 `
 },
 
 {
+    version: '0.7.9',
+    releaseDate: '2019-11-27',
     showUntil: '2019-11-26',
-    header: '0.7.9 (2019-11-27)',
     content:
 `
 <ul>
     <li>добавлен неубираемый баннер для http-версии о переходе на httpS</li>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.7.8',
+    releaseDate: '2019-11-25',
     showUntil: '2019-11-24',
-    header: '0.7.8 (2019-11-25)',
     content:
 `
 <ul>
     <li>улучшение html-фильтров для сайтов</li>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.7.7',
+    releaseDate: '2019-11-06',
     showUntil: '2019-11-10',
-    header: '0.7.7 (2019-11-06)',
     content:
 `
 <ul>
@@ -332,34 +400,40 @@ export const versionHistory = [
         <li style="list-style-type: square">от центра влево: уменьшить скорость скроллинга</li>
     </ul>
 </ul>
+
 `
 },
 
 {
+    version: '0.7.6',
+    releaseDate: '2019-10-30',
     showUntil: '2019-10-29',
-    header: '0.7.6 (2019-10-30)',
     content:
 `
 <ul>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.7.5',
+    releaseDate: '2019-10-22',
     showUntil: '2019-10-21',
-    header: '0.7.5 (2019-10-22)',
     content:
 `
 <ul>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.7.3',
+    releaseDate: '2019-10-18',
     showUntil: '2019-10-17',
-    header: '0.7.3 (2019-10-18)',
     content:
 `
 <ul>
@@ -368,12 +442,14 @@ export const versionHistory = [
     <li>добавлен параметр "Включить html-фильтр для сайтов" в раздел "Вид"->"Текст" в настройках</li>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.7.1',
+    releaseDate: '2019-09-20',
     showUntil: '2019-09-19',
-    header: '0.7.1 (2019-09-20)',
     content:
 `
 <ul>
@@ -381,12 +457,14 @@ export const versionHistory = [
     <li>на панель управления добавлена кнопка "Автономный режим"</li>
     <li>актуализирована справка</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.7.0',
+    releaseDate: '2019-09-07',
     showUntil: '2019-10-01',
-    header: '0.7.0 (2019-09-07)',
     content:
 `
 <ul>
@@ -397,23 +475,27 @@ export const versionHistory = [
     <li>немного улучшен внешний вид и управление на смартфонах</li>
     <li>добавлен параметр "Компактность" в раздел "Вид"->"Текст" в настройках</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.6.10',
+    releaseDate: '2019-07-21',
     showUntil: '2019-07-20',
-    header: '0.6.10 (2019-07-21)',
     content:
 `
 <ul>
     <li>исправления багов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.6.9',
+    releaseDate: '2019-06-23',
     showUntil: '2019-06-22',
-    header: '0.6.9 (2019-06-23)',
     content:
 `
 <ul>
@@ -424,12 +506,14 @@ export const versionHistory = [
     <li>улучшены прогрессбары</li>
     <li>исправления недочетов, небольшие оптимизации</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.6.7',
+    releaseDate: '2019-05-30',
     showUntil: '2019-06-05',
-    header: '0.6.7 (2019-05-30)',
     content:
 `
 <ul>
@@ -442,36 +526,42 @@ export const versionHistory = [
     <li>добавлен GET-параметр вида "/reader?__pp=50.5&url=..." для указания позиции в книге в процентах</li>
     <li>исправления багов и недочетов</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.6.6',
+    releaseDate: '2019-03-29',
     showUntil: '2019-03-29',
-    header: '0.6.6 (2019-03-29)',
     content:
 `
 <ul>
     <li>в справку добавлено описание настройки браузеров для автономной работы читалки (без доступа к интернету)</li>
     <li>оптимизации процесса синхронизации, внутренние переделки</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.6.4',
+    releaseDate: '2019-03-24',
     showUntil: '2019-03-24',
-    header: '0.6.4 (2019-03-24)',
     content:
 `
 <ul>
     <li>исправления багов, оптимизации</li>
     <li>добавлена возможность синхронизации данных между устройствами</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.5.4',
+    releaseDate: '2019-03-04',
     showUntil: '2019-03-04',
-    header: '0.5.4 (2019-03-04)',
     content:
 `
 <ul>
@@ -480,12 +570,14 @@ export const versionHistory = [
     <li>(0.4.2) фильтр для СИ больше не вырезает изображения</li>
     <li>(0.4.0) добавлено отображение картинок в fb2</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.3.0',
+    releaseDate: '2019-02-17',
     showUntil: '2019-02-17',
-    header: '0.3.0 (2019-02-17)',
     content:
 `
 <ul>
@@ -493,12 +585,14 @@ export const versionHistory = [
     <li>улучшено распознавание текста</li>
     <li>изменена верстка страницы - убрано позиционирование каждого слова</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.1.7',
+    releaseDate: '2019-02-14',
     showUntil: '2019-02-14',
-    header: '0.1.7 (2019-02-14)',
     content:
 `
 <ul>
@@ -508,17 +602,20 @@ export const versionHistory = [
     <li>добавлена возможность сброса настроек</li>
     <li>убран автоматический редирект на последнюю загруженную книгу, если не задан url в маршруте</li>
 </ul>
+
 `
 },
 
 {
+    version: '0.1.0',
+    releaseDate: '2019-02-12',
     showUntil: '2019-02-12',
-    header: '0.1.0 (2019-02-12)',
     content:
 `
 <ul>
     <li>первый деплой проекта, длительность разработки - 2 месяца</li>
 </ul>
+
 `
 },
 

+ 9 - 9
package-lock.json

@@ -1,12 +1,12 @@
 {
   "name": "Liberama",
-  "version": "0.11.1",
+  "version": "0.11.2",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "Liberama",
-      "version": "0.11.1",
+      "version": "0.11.2",
       "hasInstallScript": true,
       "license": "CC0-1.0",
       "dependencies": {
@@ -22,7 +22,7 @@
         "got": "^11.8.2",
         "he": "^1.2.0",
         "iconv-lite": "^0.6.3",
-        "jembadb": "^1.3.0",
+        "jembadb": "^2.3.0",
         "localforage": "^1.10.0",
         "lodash": "^4.17.21",
         "minimist": "^1.2.5",
@@ -6379,9 +6379,9 @@
       }
     },
     "node_modules/jembadb": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/jembadb/-/jembadb-1.3.0.tgz",
-      "integrity": "sha512-zMJ1GyXmqvniWToaZTzc3JPHK+SfvcynFHYsZAx8bJWlgVdQd6cqYpIEXJFP+3OZqxPTzMYG5OBGclxTsoOqtg==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/jembadb/-/jembadb-2.3.0.tgz",
+      "integrity": "sha512-Jrvbe+4a3ULZvYmM6VnIK6mGFegPELbAppSYTTvPUeMmndNVOAVr1RDHKEiV8ccLanv1xWnJYiCo1mdnepR/Cg==",
       "engines": {
         "node": ">=14.4.0"
       }
@@ -16229,9 +16229,9 @@
       }
     },
     "jembadb": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/jembadb/-/jembadb-1.3.0.tgz",
-      "integrity": "sha512-zMJ1GyXmqvniWToaZTzc3JPHK+SfvcynFHYsZAx8bJWlgVdQd6cqYpIEXJFP+3OZqxPTzMYG5OBGclxTsoOqtg=="
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/jembadb/-/jembadb-2.3.0.tgz",
+      "integrity": "sha512-Jrvbe+4a3ULZvYmM6VnIK6mGFegPELbAppSYTTvPUeMmndNVOAVr1RDHKEiV8ccLanv1xWnJYiCo1mdnepR/Cg=="
     },
     "jest-worker": {
       "version": "27.3.1",

+ 2 - 2
package.json

@@ -1,6 +1,6 @@
 {
   "name": "Liberama",
-  "version": "0.11.2",
+  "version": "0.11.3",
   "author": "Book Pauk <bookpauk@gmail.com>",
   "license": "CC0-1.0",
   "repository": "bookpauk/liberama",
@@ -60,7 +60,7 @@
     "got": "^11.8.2",
     "he": "^1.2.0",
     "iconv-lite": "^0.6.3",
-    "jembadb": "^1.3.0",
+    "jembadb": "^2.3.0",
     "localforage": "^1.10.0",
     "lodash": "^4.17.21",
     "minimist": "^1.2.5",

+ 1 - 2
server/controllers/WebSocketController.js

@@ -55,8 +55,7 @@ class WebSocketController {
             ws.lastActivity = Date.now();
             
             //pong for WebSocketConnection
-            if (req._rpo === 1)
-                this.send({_rok: 1}, req, ws);
+            this.send({_rok: 1}, req, ws);
 
             switch (req.action) {
                 case 'test':

+ 6 - 9
server/core/AsyncExit.js

@@ -1,27 +1,26 @@
 let instance = null;
 
 const defaultTimeout = 15*1000;//15 sec
-const exitSignals = ['SIGINT', 'SIGTERM', 'SIGBREAK', 'SIGHUP', 'uncaughtException', 'SIGUSR2'];
+const exitSignals = ['SIGINT', 'SIGTERM', 'SIGBREAK', 'SIGHUP', 'uncaughtException'];
 
 //singleton
 class AsyncExit {
-    constructor() {
+    constructor(signals = exitSignals, codeOnSignal = 2) {
         if (!instance) {
             this.onSignalCallbacks = new Map();
             this.callbacks = new Map();
             this.afterCallbacks = new Map();
             this.exitTimeout = defaultTimeout;
-            this.inited = false;
+            
+            this._init(signals, codeOnSignal);
+
             instance = this;
         }
 
         return instance;
     }
 
-    init(signals = exitSignals, codeOnSignal = 2) {
-        if (this.inited)
-            throw new Error('AsyncExit: initialized already');
-
+    _init(signals, codeOnSignal) {
         const runSingalCallbacks = async(signal) => {
             for (const signalCallback of this.onSignalCallbacks.keys()) {
                 try {
@@ -38,8 +37,6 @@ class AsyncExit {
                 this.exit(codeOnSignal);
             });
         }
-
-        this.inited = true;
     }
 
     onSignal(signalCallback) {

+ 2 - 3
server/core/WebSocketConnection.js

@@ -9,8 +9,7 @@ const cleanPeriod = 5*1000;//5 секунд
 class WebSocketConnection {
     //messageLifeTime в секундах (проверка каждый cleanPeriod интервал)
     constructor(url, openTimeoutSecs = 10, messageLifeTimeSecs = 30) {
-        //const ws = 'ws';//for nodejs
-        this.WebSocket = (isBrowser ? WebSocket : null/*for nodejs require(ws)*/);
+        this.WebSocket = (isBrowser ? WebSocket : require('ws'));
         this.url = url;
         this.ws = null;
         this.listeners = [];
@@ -166,7 +165,7 @@ class WebSocketConnection {
             this.requestId = (this.requestId < 1000000 ? this.requestId + 1 : 1);
             const requestId = this.requestId;//реентерабельность!!!
 
-            this.ws.send(JSON.stringify(Object.assign({requestId, _rpo: 1}, req)));//_rpo: 1 - ждем в ответ _rok: 1
+            this.ws.send(JSON.stringify(Object.assign({requestId}, req)));
 
             let resp = {};
             try {

+ 16 - 13
server/db/JembaConnManager.js

@@ -14,6 +14,7 @@ class JembaConnManager {
     constructor() {
         if (!instance) {
             this.inited = false;
+            this._db = {};
 
             instance = this;
         }
@@ -28,6 +29,8 @@ class JembaConnManager {
         this.config = config;
         this._db = {};
 
+        ayncExit.add(this.close.bind(this));
+
         for (const dbConfig of this.config.jembaDb) {
             const dbPath = `${this.config.dataDir}/db/${dbConfig.dbName}`;
 
@@ -44,17 +47,23 @@ class JembaConnManager {
             } else {
                 dbConn = new JembaDb();
             }
+            this._db[dbConfig.dbName] = dbConn;
 
             log(`Open "${dbConfig.dbName}" begin`);
-            await dbConn.openDb({
+            await dbConn.lock({
                 dbPath,
                 create: true,
-                cacheSize: dbConfig.cacheSize,
-                compressed: dbConfig.compressed,
-                forceFileClosing: dbConfig.forceFileClosing
+                softLock: true,
+
+                tableDefaults: {
+                    cacheSize: dbConfig.cacheSize,
+                    compressed: dbConfig.compressed,
+                    forceFileClosing: dbConfig.forceFileClosing,
+                    typeCompatMode: true,
+                },
             });
 
-            if (dbConfig.openAll) {
+            if (dbConfig.openAll || forceAutoRepair || dbConfig.autoRepair) {
                 try {
                     await dbConn.openAll();
                 } catch(e) {
@@ -83,21 +92,15 @@ class JembaConnManager {
                 if (applied.length)
                     log(`${applied.length} migrations applied to "${dbConfig.dbName}"`);
             }
-
-            this._db[dbConfig.dbName] = dbConn;
         }
 
-        ayncExit.add(this.close.bind(this));
-
         this.inited = true;
     }
 
     async close() {
-        if (!this.inited)
-            return;
-
         for (const dbConfig of this.config.jembaDb) {
-            await this._db[dbConfig.dbName].closeDb();
+            if (this._db[dbConfig.dbName])
+                await this._db[dbConfig.dbName].unlock();
         }
 
         this._db = {};

+ 0 - 1
server/index.js

@@ -8,7 +8,6 @@ const http = require('http');
 const WebSocket = require ('ws');
 
 const ayncExit = new (require('./core/AsyncExit'))();
-ayncExit.init();
 
 let log = null;