From 355410c03c3cdfa13fc8164841c188522a83a22f Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 12 Nov 2020 19:13:24 +0700 Subject: [PATCH 1/3] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B1=D0=B0=D0=B3=D0=B0=20-=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D1=8F=D0=BB=D0=B8?= =?UTF-8?q?=D1=81=D1=8C=20=D1=85=D0=BE=D1=82=D0=BA=D0=B5=D0=B8=20=D0=B2=20?= =?UTF-8?q?=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/share/utils.js | 63 ++++++++++++++++++++++++---------- client/store/modules/reader.js | 7 ++-- 2 files changed, 50 insertions(+), 20 deletions(-) diff --git a/client/share/utils.js b/client/share/utils.js index 0dd69976..add984a8 100644 --- a/client/share/utils.js +++ b/client/share/utils.js @@ -103,30 +103,57 @@ export function fromBase64(data) { )); } -export function getObjDiff(oldObj, newObj) { - const result = {__isDiff: true, change: {}, add: {}, del: []}; +export function getObjDiff(oldObj, newObj, opts = {}) { + const { + exclude = [], + excludeAdd = [], + excludeDel = [], + } = opts; - 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]); + 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)) { + const kp = `${keyPath}${key}`; + if (exAdd.has(kp)) + continue; + + if (!oldObj.hasOwnProperty(key)) { + result.add[key] = _.cloneDeep(newObj[key]); + } + } + + return result; } - for (const key of Object.keys(newObj)) { - if (!oldObj.hasOwnProperty(key)) { - result.add[key] = _.cloneDeep(newObj[key]); - } - } - - return result; + return makeObjDiff(oldObj, newObj, ''); } export function isObjDiff(diff) { diff --git a/client/store/modules/reader.js b/client/store/modules/reader.js index 12ec4d67..cf7cd0c4 100644 --- a/client/store/modules/reader.js +++ b/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}); } From ae260e74f6cb0729fd336aa7ea3f48b8ee10e947 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 12 Nov 2020 19:39:57 +0700 Subject: [PATCH 2/3] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BC=D0=B5=D1=85=D0=B0=D0=BD=D0=B8=D0=B7=D0=BC=D0=B0?= =?UTF-8?q?=20=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B8=20TempPublicDir?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/config/base.js | 2 +- server/core/Reader/ReaderWorker.js | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/server/config/base.js b/server/config/base.js index f7506800..8211cad4 100644 --- a/server/config/base.js +++ b/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, diff --git a/server/core/Reader/ReaderWorker.js b/server/core/Reader/ReaderWorker.js index 32f77807..3e76f8aa 100644 --- a/server/core/Reader/ReaderWorker.js +++ b/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 { From 2146cb35766828aaaf9ca3ab966f5dd4ba45063f Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 12 Nov 2020 19:43:33 +0700 Subject: [PATCH 3/3] =?UTF-8?q?=D0=92=D0=B5=D1=80=D1=81=D0=B8=D1=8F=200.9.?= =?UTF-8?q?7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/versionHistory.js | 11 +++++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/client/components/Reader/versionHistory.js b/client/components/Reader/versionHistory.js index 02038499..55941153 100644 --- a/client/components/Reader/versionHistory.js +++ b/client/components/Reader/versionHistory.js @@ -1,4 +1,15 @@ export const versionHistory = [ +{ + showUntil: '2020-11-11', + header: '0.9.7 (2020-11-12)', + content: +` +
    +
  • исправления багов
  • +
+` +}, + { showUntil: '2020-11-05', header: '0.9.6 (2020-11-06)', diff --git a/package-lock.json b/package-lock.json index 2390c0d2..1d1d0700 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Liberama", - "version": "0.9.6", + "version": "0.9.7", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ebbfb5b2..cbce616e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Liberama", - "version": "0.9.6", + "version": "0.9.7", "author": "Book Pauk ", "license": "CC0-1.0", "repository": "bookpauk/liberama",