Compare commits

...

5 Commits

Author SHA1 Message Date
Book Pauk
d55a616fe0 Merge branch 'release/0.9.7' 2020-11-12 19:44:08 +07:00
Book Pauk
2146cb3576 Версия 0.9.7 2020-11-12 19:43:33 +07:00
Book Pauk
ae260e74f6 Поправка механизма чистки TempPublicDir 2020-11-12 19:39:57 +07:00
Book Pauk
355410c03c Исправление бага - не изменялись хоткеи в настройках 2020-11-12 19:13:24 +07:00
Book Pauk
718ad51fac Merge tag '0.9.6-1' into develop
0.9.6-1
2020-11-07 20:57:02 +07:00
7 changed files with 76 additions and 27 deletions

View File

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

View File

@@ -103,24 +103,48 @@ export function fromBase64(data) {
)); ));
} }
export function getObjDiff(oldObj, newObj) { 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: []}; const result = {__isDiff: true, change: {}, add: {}, del: []};
keyPath = `${keyPath}${keyPath ? '/' : ''}`;
for (const key of Object.keys(oldObj)) { for (const key of Object.keys(oldObj)) {
const kp = `${keyPath}${key}`;
if (newObj.hasOwnProperty(key)) { if (newObj.hasOwnProperty(key)) {
if (ex.has(kp))
continue;
if (!_.isEqual(oldObj[key], newObj[key])) { if (!_.isEqual(oldObj[key], newObj[key])) {
if (_.isObject(oldObj[key]) && _.isObject(newObj[key])) { if (_.isObject(oldObj[key]) && _.isObject(newObj[key])) {
result.change[key] = getObjDiff(oldObj[key], newObj[key]); result.change[key] = makeObjDiff(oldObj[key], newObj[key], kp);
} else { } else {
result.change[key] = _.cloneDeep(newObj[key]); result.change[key] = _.cloneDeep(newObj[key]);
} }
} }
} else { } else {
if (exDel.has(kp))
continue;
result.del.push(key); result.del.push(key);
} }
} }
for (const key of Object.keys(newObj)) { for (const key of Object.keys(newObj)) {
const kp = `${keyPath}${key}`;
if (exAdd.has(kp))
continue;
if (!oldObj.hasOwnProperty(key)) { if (!oldObj.hasOwnProperty(key)) {
result.add[key] = _.cloneDeep(newObj[key]); result.add[key] = _.cloneDeep(newObj[key]);
} }
@@ -129,6 +153,9 @@ export function getObjDiff(oldObj, newObj) {
return result; return result;
} }
return makeObjDiff(oldObj, newObj, '');
}
export function isObjDiff(diff) { export function isObjDiff(diff) {
return (_.isObject(diff) && diff.__isDiff && diff.change && diff.add && diff.del); return (_.isObject(diff) && diff.__isDiff && diff.change && diff.add && diff.del);
} }

View File

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

2
package-lock.json generated
View File

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

View File

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

View File

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

View File

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