From 972f95768557bcc8f3d2b8fb98c78a59bfc9fdc7 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Fri, 18 Dec 2020 22:44:20 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=B4=20=D0=B2=D0=BA=D0=BB=D0=B0=D0=B4=D0=BA=D0=BE=D0=B9?= =?UTF-8?q?=20"=D0=9A=D0=BE=D0=BD=D0=B2=D0=B5=D1=80=D1=82=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/Reader.vue | 6 ++- .../Reader/SettingsPage/SettingsPage.vue | 4 +- .../SettingsPage/include/ConvertTab.inc | 37 ++++++++++++++----- client/store/modules/reader.js | 1 + server/controllers/ReaderController.js | 1 + .../core/Reader/BookConverter/ConvertDjvu.js | 21 +++++++++-- 6 files changed, 52 insertions(+), 18 deletions(-) diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index 857edca9..07c93487 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -318,6 +318,7 @@ class Reader extends Vue { this.enableSitesFilter = settings.enableSitesFilter; this.showNeedUpdateNotify = settings.showNeedUpdateNotify; this.splitToPara = settings.splitToPara; + this.djvuQuality = settings.djvuQuality; this.readerActionByKeyCode = utils.userHotKeysObjectSwap(settings.userHotKeys); this.$root.readerActionByKeyEvent = (event) => { @@ -973,10 +974,11 @@ class Reader extends Vue { if (!book) { book = await readerApi.loadBook({ url, + uploadFileName, + enableSitesFilter: this.enableSitesFilter, skipHtmlCheck: (this.splitToPara ? true : false), isText: (this.splitToPara ? true : false), - enableSitesFilter: this.enableSitesFilter, - uploadFileName + djvuQuality: this.djvuQuality, }, (state) => { progress.setState(state); diff --git a/client/components/Reader/SettingsPage/SettingsPage.vue b/client/components/Reader/SettingsPage/SettingsPage.vue index 582c415c..2f08064a 100644 --- a/client/components/Reader/SettingsPage/SettingsPage.vue +++ b/client/components/Reader/SettingsPage/SettingsPage.vue @@ -549,7 +549,7 @@ class SettingsPage extends Vue { margin-bottom: 5px; } -.label-1 { +.label-1, .label-7 { width: 75px; } @@ -561,7 +561,7 @@ class SettingsPage extends Vue { width: 100px; } -.label-1, .label-2, .label-3, .label-4, .label-5, .label-6 { +.label-1, .label-2, .label-3, .label-4, .label-5, .label-6, .label-7 { display: flex; flex-direction: column; justify-content: center; diff --git a/client/components/Reader/SettingsPage/include/ConvertTab.inc b/client/components/Reader/SettingsPage/include/ConvertTab.inc index e59a86a7..2441be44 100644 --- a/client/components/Reader/SettingsPage/include/ConvertTab.inc +++ b/client/components/Reader/SettingsPage/include/ConvertTab.inc @@ -3,10 +3,25 @@ Настройки конвертирования применяются ко всем вновь открываемым или обновляемым файлам + +
HTML, XML, TXT
-
Сайты
+
Текст
+
+ + + Опция принудительно включает эвристику разбиения текста на
+ параграфы в случае, если формат файла определен как html,
+ xml или txt. Возможна нечитабельная разметка текста. +
+
+
+
+ +
+
Сайты
@@ -21,19 +36,21 @@
+ +
PDF
+ + +
DJVU
-
Текст
+
Качество
- + - Опция принудительно включает эвристику разбиения текста на
- параграфы в случае, если формат файла определен как html,
- xml или txt. Возможна нечитабельная разметка текста. + Качество конвертирования Djvu в Fb2. Чем значение выше, тем больше
+ размер итогового файла. Если сервер отказывается конвертировать
+ слишком большой файл, то попробуйте понизить качество.
-
+
-
PDF
- -
DJVU
diff --git a/client/store/modules/reader.js b/client/store/modules/reader.js index 2d104c68..a776633d 100644 --- a/client/store/modules/reader.js +++ b/client/store/modules/reader.js @@ -253,6 +253,7 @@ const settingDefaults = { imageFitWidth: true, enableSitesFilter: true, splitToPara: false, + djvuQuality: 20, showServerStorageMessages: true, showWhatsNewDialog: true, diff --git a/server/controllers/ReaderController.js b/server/controllers/ReaderController.js index 763d9016..6f521a60 100644 --- a/server/controllers/ReaderController.js +++ b/server/controllers/ReaderController.js @@ -23,6 +23,7 @@ class ReaderController extends BaseController { skipHtmlCheck: (request.hasOwnProperty('skipHtmlCheck') ? request.skipHtmlCheck : false), isText: (request.hasOwnProperty('isText') ? request.isText : false), uploadFileName: (request.hasOwnProperty('uploadFileName') ? request.uploadFileName : false), + djvuQuality: (request.hasOwnProperty('djvuQuality') ? request.djvuQuality : false), }); const state = this.workerState.getState(workerId); return (state ? state : {}); diff --git a/server/core/Reader/BookConverter/ConvertDjvu.js b/server/core/Reader/BookConverter/ConvertDjvu.js index 35a87e8e..e794700c 100644 --- a/server/core/Reader/BookConverter/ConvertDjvu.js +++ b/server/core/Reader/BookConverter/ConvertDjvu.js @@ -16,7 +16,12 @@ class ConvertDjvu extends ConvertJpegPng { if (!this.check(data, opts)) return false; - const {inputFiles, callback, abort} = opts; + let {inputFiles, callback, abort, djvuQuality} = opts; + + djvuQuality = (djvuQuality && djvuQuality <= 100 && djvuQuality >= 10 ? djvuQuality : 20); + let jpegQuality = djvuQuality; + let tiffQuality = djvuQuality + 30; + tiffQuality = (tiffQuality < 85 ? tiffQuality : 85); const ddjvuPath = '/usr/bin/ddjvu'; if (!await fs.pathExists(ddjvuPath)) @@ -40,7 +45,7 @@ class ConvertDjvu extends ConvertJpegPng { //конвертируем в tiff let perc = 0; - await this.execConverter(ddjvuPath, ['-format=tiff', '-quality=50', '-verbose', inputFiles.sourceFile, tifFile], () => { + await this.execConverter(ddjvuPath, ['-format=tiff', `-quality=${tiffQuality}`, '-verbose', inputFiles.sourceFile, tifFile], () => { perc = (perc < 100 ? perc + 1 : 40); callback(perc); }, abort); @@ -57,16 +62,24 @@ class ConvertDjvu extends ConvertJpegPng { await fs.remove(tifFile); //конвертируем в jpg - await this.execConverter(mogrifyPath, ['-quality', '20', '-scale', '2048>', '-verbose', '-format', 'jpg', `${dir}*.tif`], () => { + await this.execConverter(mogrifyPath, ['-quality', jpegQuality, '-scale', '2048>', '-verbose', '-format', 'jpg', `${dir}*.tif`], () => { perc = (perc < 100 ? perc + 1 : 40); callback(perc); }, abort); + limitSize = 2*this.config.maxUploadFileSize; + let jpgFilesSize = 0; //ищем изображения let files = []; await utils.findFiles(async(file) => { - if (path.extname(file) == '.jpg') + if (path.extname(file) == '.jpg') { + jpgFilesSize += (await fs.stat(file)).size; + if (jpgFilesSize > limitSize) { + throw new Error(`Файл для конвертирования слишком большой|FORLOG| jpgFilesSize: ${jpgFilesSize} > ${limitSize}`); + } + files.push({name: file, base: path.basename(file)}); + } }, dir); files.sort((a, b) => a.base.localeCompare(b.base));