Forráskód Böngészése

Рефакторинг

Book Pauk 6 éve
szülő
commit
d040dd0718
2 módosított fájl, 42 hozzáadás és 15 törlés
  1. 34 0
      server/core/FileDownloader.js
  2. 8 15
      server/core/ReaderWorker.js

+ 34 - 0
server/core/FileDownloader.js

@@ -0,0 +1,34 @@
+const got = require('got');
+
+class FileDownloader {
+    constructor() {
+    }
+
+    async load(url, callback) {
+        const maxDownloadSize = 10*1024*1024;
+
+        let estSize = 100000;
+        const request = got(url).on('downloadProgress', progress => {
+            if (progress.transferred > maxDownloadSize) {
+                request.cancel();
+            }
+            const prog = Math.round(progress.transferred/estSize*100);
+            if (callback)
+                callback(prog);
+            if (prog > 100)
+                estSize *= 1.5;
+        });
+
+
+        try {
+            return (await request).body;
+        } catch (error) {
+            if (request.isCanceled) {
+                throw new Error('file too big')
+            }
+            throw error;
+        }
+    }
+}
+
+module.exports = FileDownloader;

+ 8 - 15
server/core/ReaderWorker.js

@@ -1,11 +1,11 @@
+const fs = require('fs-extra');
+
 const workerState = require('./workerState');
+const FileDownloader = require('./FileDownloader');
 const FileDecompressor = require('./FileDecompressor');
 const BookConverter = require('./BookConverter');
 const utils = require('./utils');
 
-const fs = require('fs-extra');
-const got = require('got');
-
 class ReaderWorker {
     constructor(config) {
         this.config = Object.assign({}, config);
@@ -16,12 +16,12 @@ class ReaderWorker {
         this.config.tempPublicDir = `${config.publicDir}/tmp`;
         fs.ensureDirSync(this.config.tempPublicDir);
 
+        this.down = new FileDownloader();
         this.decomp = new FileDecompressor();
         this.bookConverter = new BookConverter();
     }
 
     async loadBook(url, wState) {
-        const maxDownloadSize = 10*1024*1024;
         let errMes = '';
         let decompDir = '';
         let downloadedFilename = '';
@@ -33,19 +33,12 @@ class ReaderWorker {
             const decompDirname = utils.randomHexString(30);
 
             //download
-            let estSize = 100000;//
-            const downdata = await got(url).on('downloadProgress', progress => {
-                if (progress.transferred > maxDownloadSize) {
-                    errMes = 'file too big';
-                    d.destroy();
-                }
-                const prog = Math.round(progress.transferred/estSize*100);
-                if (prog > 100)
-                    estSize *= 1.5;
-                wState.set({progress: (prog > 100 ? 100 : prog) });
+            const downdata = await this.down.load(url, (progress) => {
+                wState.set({progress});
             });
+
             downloadedFilename = `${this.config.tempDownloadDir}/${tempFilename}`;
-            await fs.writeFile(downloadedFilename, downdata.body);
+            await fs.writeFile(downloadedFilename, downdata);
             wState.set({progress: 100});
 
             //decompress