Преглед на файлове

Merge branch 'release/0.9.7'

Book Pauk преди 4 години
родител
ревизия
d55a616fe0
променени са 7 файла, в които са добавени 75 реда и са изтрити 26 реда
  1. 11 0
      client/components/Reader/versionHistory.js
  2. 44 17
      client/share/utils.js
  3. 5 2
      client/store/modules/reader.js
  4. 1 1
      package-lock.json
  5. 1 1
      package.json
  6. 1 1
      server/config/base.js
  7. 12 4
      server/core/Reader/ReaderWorker.js

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

@@ -1,4 +1,15 @@
 export const versionHistory = [
+{
+    showUntil: '2020-11-11',
+    header: '0.9.7 (2020-11-12)',
+    content:
+`
+<ul>
+    <li>исправления багов</li>
+</ul>
+`
+},
+
 {
     showUntil: '2020-11-05',
     header: '0.9.6 (2020-11-06)',

+ 44 - 17
client/share/utils.js

@@ -103,30 +103,57 @@ export function fromBase64(data) {
     ));
 }
 
-export function getObjDiff(oldObj, newObj) {
-    const result = {__isDiff: true, change: {}, add: {}, del: []};
-
-    for (const key of Object.keys(oldObj)) {
-        if (newObj.hasOwnProperty(key)) {
-            if (!_.isEqual(oldObj[key], newObj[key])) {
-                if (_.isObject(oldObj[key]) && _.isObject(newObj[key])) {
-                    result.change[key] = getObjDiff(oldObj[key], newObj[key]);
-                } else {
-                    result.change[key] = _.cloneDeep(newObj[key]);
+export function getObjDiff(oldObj, newObj, opts = {}) {
+    const {
+        exclude = [],
+        excludeAdd = [],
+        excludeDel = [],
+    } = opts;
+
+    const ex = new Set(exclude);
+    const exAdd = new Set(excludeAdd);
+    const exDel = new Set(excludeDel);
+
+    const makeObjDiff = (oldObj, newObj, keyPath) => {
+        const result = {__isDiff: true, change: {}, add: {}, del: []};
+
+        keyPath = `${keyPath}${keyPath ? '/' : ''}`;
+
+        for (const key of Object.keys(oldObj)) {
+            const kp = `${keyPath}${key}`;
+
+            if (newObj.hasOwnProperty(key)) {
+                if (ex.has(kp))
+                    continue;
+
+                if (!_.isEqual(oldObj[key], newObj[key])) {
+                    if (_.isObject(oldObj[key]) && _.isObject(newObj[key])) {
+                        result.change[key] = makeObjDiff(oldObj[key], newObj[key], kp);
+                    } else {
+                        result.change[key] = _.cloneDeep(newObj[key]);
+                    }
                 }
+            } else {
+                if (exDel.has(kp))
+                    continue;
+                result.del.push(key);
             }
-        } else {
-            result.del.push(key);
         }
-    }
 
-    for (const key of Object.keys(newObj)) {
-        if (!oldObj.hasOwnProperty(key)) {
-            result.add[key] = _.cloneDeep(newObj[key]);
+        for (const key of Object.keys(newObj)) {
+            const kp = `${keyPath}${key}`;
+            if (exAdd.has(kp))
+                continue;
+
+            if (!oldObj.hasOwnProperty(key)) {
+                result.add[key] = _.cloneDeep(newObj[key]);
+            }
         }
+
+        return result;
     }
 
-    return result;
+    return makeObjDiff(oldObj, newObj, '');
 }
 
 export function isObjDiff(diff) {

+ 5 - 2
client/store/modules/reader.js

@@ -268,9 +268,12 @@ for (const button of toolButtons)
 for (const hotKey of hotKeys)
     settingDefaults.userHotKeys[hotKey.name] = hotKey.codes;
 
+const excludeDiffHotKeys = [];
+for (const hotKey of hotKeys)
+    excludeDiffHotKeys.push(`userHotKeys/${hotKey.name}`);
+
 function addDefaultsToSettings(settings) {
-    const diff = utils.getObjDiff(settings, settingDefaults);
-    
+    const diff = utils.getObjDiff(settings, settingDefaults, {exclude: excludeDiffHotKeys});
     if (!utils.isEmptyObjDiffDeep(diff, {isApplyChange: false})) {
         return utils.applyObjDiff(settings, diff, {isApplyChange: false});
     }

+ 1 - 1
package-lock.json

@@ -1,6 +1,6 @@
 {
   "name": "Liberama",
-  "version": "0.9.6",
+  "version": "0.9.7",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "Liberama",
-  "version": "0.9.6",
+  "version": "0.9.7",
   "author": "Book Pauk <bookpauk@gmail.com>",
   "license": "CC0-1.0",
   "repository": "bookpauk/liberama",

+ 1 - 1
server/config/base.js

@@ -18,7 +18,7 @@ module.exports = {
     loggingEnabled: true,
 
     maxUploadFileSize: 50*1024*1024,//50Мб
-    maxTempPublicDirSize: 512*1024*1024,//512Мб
+    maxTempPublicDirSize: 512*1024*1024,//512Мб + 20% квота если проблема с remoteWebDavStorage
     maxUploadPublicDirSize: 200*1024*1024,//100Мб
 
     useExternalBookConverter: false,

+ 12 - 4
server/core/Reader/ReaderWorker.js

@@ -266,30 +266,38 @@ class ReaderWorker {
                     files.push({name, stat});
                 }
             }
-            log(`clean dir ${dir}, maxSize=${maxSize}, found ${files.length} files`);
+            log(`clean dir ${dir}, maxSize=${maxSize}, found ${files.length} files, total size=${size}`);
 
             files.sort((a, b) => a.stat.mtimeMs - b.stat.mtimeMs);
 
             let i = 0;
+            let j = 0;
             while (i < files.length && size > maxSize) {
                 const file = files[i];
                 const oldFile = `${dir}/${file.name}`;
 
+                let remoteSuccess = true;
                 //отправляем только this.config.tempPublicDir
-                //TODO: убрать в будущем, т.к. уже делается ленивое сохранение compFilename в удаленном хранилище
                 if (this.remoteWebDavStorage && dir === this.config.tempPublicDir) {
+                    remoteSuccess = false;
                     try {
                         //log(`remoteWebDavStorage.putFile ${path.basename(oldFile)}`);
                         await this.remoteWebDavStorage.putFile(oldFile);
+                        remoteSuccess = true;
                     } catch (e) {
                         log(LM_ERR, e.stack);
                     }
                 }
-                await fs.remove(oldFile);
+                //реально удаляем только если сохранили в хранилище
+                if (remoteSuccess || size > maxSize*1.2) {
+                    await fs.remove(oldFile);
+                    j++;
+                }
+                
                 size -= file.stat.size;
                 i++;
             }
-            log(`removed ${i} files`);
+            log(`removed ${j} files`);
         } catch(e) {
             log(LM_ERR, e.stack);
         } finally {