浏览代码

Merge branch 'release/0.9.9-2'

Book Pauk 4 年之前
父节点
当前提交
8f7cafb240

+ 1 - 1
docs/beta/run_server.sh

@@ -1,3 +1,3 @@
 #!/bin/bash
 #!/bin/bash
 
 
-sudo -H -u www-data /home/beta.liberama/liberama
+sudo -H -u www-data bash -c "cd /var/www; /home/beta.liberama/liberama"

+ 2 - 2
docs/omnireader.ru/README.md

@@ -27,9 +27,9 @@ sudo chown www-data.www-data /home/liberama
 
 
 ### external converter `calibre`, download from https://download.calibre-ebook.com/
 ### external converter `calibre`, download from https://download.calibre-ebook.com/
 ```
 ```
-wget "https://download.calibre-ebook.com/3.39.1/calibre-3.39.1-x86_64.txz"
+wget "https://download.calibre-ebook.com/5.5.0/calibre-5.5.0-x86_64.txz"
 sudo -u www-data mkdir -p /home/liberama/data/calibre
 sudo -u www-data mkdir -p /home/liberama/data/calibre
-sudo -u www-data tar xvf calibre-3.39.1-x86_64.txz -C /home/liberama/data/calibre
+sudo -u www-data tar xvf calibre-5.5.0-x86_64.txz -C /home/liberama/data/calibre
 ```
 ```
 
 
 ### external converters
 ### external converters

+ 1 - 1
docs/omnireader.ru/cron_server.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 #!/bin/bash
 
 
 if ! pgrep -x "liberama" > /dev/null ; then
 if ! pgrep -x "liberama" > /dev/null ; then
-    sudo -H -u www-data /home/liberama/liberama
+    sudo -H -u www-data bash -c "cd /var/www; /home/liberama/liberama"
 else
 else
     echo "Process 'liberama' already running"
     echo "Process 'liberama' already running"
 fi
 fi

+ 1 - 1
docs/omnireader.ru/start_server.sh

@@ -1,4 +1,4 @@
 #!/bin/bash
 #!/bin/bash
 
 
-sudo -H -u www-data /home/liberama/liberama &
+sudo -H -u www-data bash -c "cd /var/www; /home/liberama/liberama" &
 sudo service cron start
 sudo service cron start

+ 1 - 1
server/core/FileDetector/index.js

@@ -54,7 +54,7 @@ class FileDetector {
 
 
     fromBuffer(buffer, callback) {
     fromBuffer(buffer, callback) {
         let result = null;
         let result = null;
-
+        //console.log(buffer);
         const invalidSignaturesList = this.validateSigantures();
         const invalidSignaturesList = this.validateSigantures();
         if (invalidSignaturesList.length) {
         if (invalidSignaturesList.length) {
             return callback(invalidSignaturesList);
             return callback(invalidSignaturesList);

+ 3 - 1
server/core/FileDetector/signatures.json

@@ -676,7 +676,9 @@
         { "type": "equal", "end": 19, "bytes": "3c3f786d6c2076657273696f6e3d22312e3022" },
         { "type": "equal", "end": 19, "bytes": "3c3f786d6c2076657273696f6e3d22312e3022" },
         { "type": "equal", "end": 22, "bytes": "efbbbf3c3f786d6c2076657273696f6e3d22312e3022" },
         { "type": "equal", "end": 22, "bytes": "efbbbf3c3f786d6c2076657273696f6e3d22312e3022" },
         { "type": "equal", "end": 19, "bytes": "3c3f786d6c2076657273696f6e3d27312e3027" },
         { "type": "equal", "end": 19, "bytes": "3c3f786d6c2076657273696f6e3d27312e3027" },
-        { "type": "equal", "end": 22, "bytes": "efbbbf3c3f786d6c2076657273696f6e3d27312e3027" }
+        { "type": "equal", "end": 22, "bytes": "efbbbf3c3f786d6c2076657273696f6e3d27312e3027" },
+        { "type": "equal", "end": 40, "bytes": "fffe3c003f0078006d006c002000760065007200730069006f006e003d00220031002e0030002200" },
+        { "type": "equal", "end": 40, "bytes": "fffe3c003f0078006d006c002000760065007200730069006f006e003d00270031002e0030002700" }
       ]
       ]
       }
       }
     ]
     ]

+ 1 - 3
server/core/Reader/BookConverter/ConvertBase.js

@@ -53,9 +53,7 @@ class ConvertBase {
                 abort
                 abort
             });
             });
             if (result.code != 0) {
             if (result.code != 0) {
-                let error = result.code;
-                if (this.config.branch == 'development')
-                    error = `exec: ${path}, stdout: ${result.stdout}, stderr: ${result.stderr}`;
+                const error = `${result.code}|FORLOG|, exec: ${path}, args: ${args.join(' ')}, stdout: ${result.stdout}, stderr: ${result.stderr}`;
                 throw new Error(`Внешний конвертер завершился с ошибкой: ${error}`);
                 throw new Error(`Внешний конвертер завершился с ошибкой: ${error}`);
             }
             }
         } catch(e) {
         } catch(e) {

+ 27 - 6
server/core/Reader/BookConverter/ConvertFb2.js

@@ -1,5 +1,6 @@
 const ConvertBase = require('./ConvertBase');
 const ConvertBase = require('./ConvertBase');
 const iconv = require('iconv-lite');
 const iconv = require('iconv-lite');
+const textUtils = require('./textUtils');
 
 
 class ConvertFb2 extends ConvertBase {
 class ConvertFb2 extends ConvertBase {
     check(data, opts) {
     check(data, opts) {
@@ -9,26 +10,46 @@ class ConvertFb2 extends ConvertBase {
     }
     }
 
 
     async run(data, opts) {
     async run(data, opts) {
-        if (!this.check(data, opts))
+        let newData = data;
+
+        //Корректируем кодировку, 16-битные кодировки должны стать utf-8
+        const encoding = textUtils.getEncoding(newData);
+        if (encoding.indexOf('UTF-16') == 0) {
+            newData = Buffer.from(iconv.decode(newData, encoding));
+        }
+
+        if (!this.check(newData, opts))
             return false;
             return false;
 
 
-        return this.checkEncoding(data);
+        return this.checkEncoding(newData);
     }
     }
 
 
     checkEncoding(data) {
     checkEncoding(data) {
         let result = data;
         let result = data;
 
 
-        const left = data.indexOf('<?xml version="1.0"');
+        let q = '"';
+        let left = data.indexOf('<?xml version="1.0"');
+        if (left < 0) {
+            left = data.indexOf('<?xml version=\'1.0\'');
+            q = '\'';
+        }
+
         if (left >= 0) {
         if (left >= 0) {
             const right = data.indexOf('?>', left);
             const right = data.indexOf('?>', left);
             if (right >= 0) {
             if (right >= 0) {
                 const head = data.slice(left, right + 2).toString();
                 const head = data.slice(left, right + 2).toString();
-                const m = head.match(/encoding="(.*?)"/);
+                const m = head.match(/encoding=['"](.*?)['"]/);
                 if (m) {
                 if (m) {
                     let encoding = m[1].toLowerCase();
                     let encoding = m[1].toLowerCase();
                     if (encoding != 'utf-8') {
                     if (encoding != 'utf-8') {
-                        result = iconv.decode(data, encoding);
-                        result = Buffer.from(result.toString().replace(m[0], 'encoding="utf-8"'));
+                        //encoding может не соответсвовать реальной кодировке файла, поэтому:
+                        let calcEncoding = textUtils.getEncoding(data);
+                        if (calcEncoding.indexOf('ISO-8859') >= 0) {
+                            calcEncoding = encoding;
+                        }
+
+                        result = iconv.decode(data, calcEncoding);
+                        result = Buffer.from(result.toString().replace(m[0], `encoding=${q}utf-8${q}`));
                     }
                     }
                 }
                 }
             }
             }

+ 1 - 1
server/core/Reader/BookConverter/ConvertHtml.js

@@ -218,7 +218,7 @@ class ConvertHtml extends ConvertBase {
 
 
             let i = 0;
             let i = 0;
             //если разброс не слишком большой, выделяем параграфы
             //если разброс не слишком большой, выделяем параграфы
-            if (d < 10 && spaceCounter.length) {
+            if (d < 20 && spaceCounter.length) {
                 total /= 20;
                 total /= 20;
                 i = spaceCounter.length - 1;
                 i = spaceCounter.length - 1;
                 while (i > 0 && (!spaceCounter[i] || spaceCounter[i] < total)) i--;
                 while (i > 0 && (!spaceCounter[i] || spaceCounter[i] < total)) i--;

+ 1 - 1
server/core/Reader/BookConverter/ConvertPdf.js

@@ -24,7 +24,7 @@ class ConvertPdf extends ConvertHtml {
 
 
         //конвертируем в xml
         //конвертируем в xml
         let perc = 0;
         let perc = 0;
-        await this.execConverter(this.pdfToHtmlPath, ['-c', '-s', '-xml', inputFiles.sourceFile, outFile], () => {
+        await this.execConverter(this.pdfToHtmlPath, ['-nodrm', '-c', '-s', '-xml', inputFiles.sourceFile, outFile], () => {
             perc = (perc < 80 ? perc + 10 : 40);
             perc = (perc < 80 ? perc + 10 : 40);
             callback(perc);
             callback(perc);
         }, abort);
         }, abort);

+ 8 - 3
server/core/Reader/ReaderWorker.js

@@ -171,10 +171,15 @@ class ReaderWorker {
 
 
         } catch (e) {
         } catch (e) {
             log(LM_ERR, e.stack);
             log(LM_ERR, e.stack);
+            let mes = e.message.split('|FORLOG|');
+            if (mes[1])
+                log(LM_ERR, mes[0] + mes[1]);
             log(LM_ERR, `downloadedFilename: ${downloadedFilename}`);
             log(LM_ERR, `downloadedFilename: ${downloadedFilename}`);
-            if (e.message == 'abort')
-                e.message = overLoadMes;
-            wState.set({state: 'error', error: e.message});
+
+            mes = mes[0];
+            if (mes == 'abort')
+                mes = overLoadMes;
+            wState.set({state: 'error', error: mes});
         } finally {
         } finally {
             //clean
             //clean
             if (q)
             if (q)