Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
440d1b3ba0 | ||
|
|
9c7a6c64b0 | ||
|
|
7cc63fe849 | ||
|
|
5647e8219d | ||
|
|
81629fab7a | ||
|
|
992d2033f3 |
10
package-lock.json
generated
10
package-lock.json
generated
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "Liberama",
|
"name": "Liberama",
|
||||||
"version": "0.8.1",
|
"version": "0.8.2",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -12807,14 +12807,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"webdav-fs": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/webdav-fs/-/webdav-fs-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-TjqQKNnf1NuPiMEFJVrmWUYpIEgUxWRktddu5JhQsyxFIOyAJT0cpLyaoOdAp/yrG1yXgDsa6ZL9z+h4Z71zWA==",
|
|
||||||
"requires": {
|
|
||||||
"webdav": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"webpack": {
|
"webpack": {
|
||||||
"version": "4.40.2",
|
"version": "4.40.2",
|
||||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.40.2.tgz",
|
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.40.2.tgz",
|
||||||
|
|||||||
@@ -84,7 +84,7 @@
|
|||||||
"vue-router": "^3.1.3",
|
"vue-router": "^3.1.3",
|
||||||
"vuex": "^3.1.1",
|
"vuex": "^3.1.1",
|
||||||
"vuex-persistedstate": "^2.5.4",
|
"vuex-persistedstate": "^2.5.4",
|
||||||
"webdav-fs": "^2.0.0",
|
"webdav": "^2.10.1",
|
||||||
"zip-stream": "^2.1.2"
|
"zip-stream": "^2.1.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class WorkerController extends BaseController {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const splitter = '-- aod2t5hDXU32bUFyqlFE next status --';
|
const splitter = '-- aod2t5hDXU32bUFyqlFE next status --';
|
||||||
const refreshPause = 300;
|
const refreshPause = 200;
|
||||||
let i = 0;
|
let i = 0;
|
||||||
let prevProgress = -1;
|
let prevProgress = -1;
|
||||||
let prevState = '';
|
let prevState = '';
|
||||||
@@ -47,6 +47,10 @@ class WorkerController extends BaseController {
|
|||||||
state = this.workerState.getState(request.workerId);
|
state = this.workerState.getState(request.workerId);
|
||||||
if (!state) break;
|
if (!state) break;
|
||||||
|
|
||||||
|
if (i == 0) {
|
||||||
|
state = Object.assign({dummy: '0'.repeat(1024)}, state);
|
||||||
|
}
|
||||||
|
|
||||||
res.write(splitter + JSON.stringify(state));
|
res.write(splitter + JSON.stringify(state));
|
||||||
res.flush();
|
res.flush();
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ const RemoteWebDavStorage = require('../RemoteWebDavStorage');
|
|||||||
const utils = require('../utils');
|
const utils = require('../utils');
|
||||||
const log = new (require('../AppLogger'))().log;//singleton
|
const log = new (require('../AppLogger'))().log;//singleton
|
||||||
|
|
||||||
|
const cleanDirPeriod = 60*60*1000;//1 раз в час
|
||||||
|
|
||||||
let instance = null;
|
let instance = null;
|
||||||
|
|
||||||
//singleton
|
//singleton
|
||||||
@@ -31,11 +33,13 @@ class ReaderWorker {
|
|||||||
|
|
||||||
this.remoteWebDavStorage = false;
|
this.remoteWebDavStorage = false;
|
||||||
if (config.remoteWebDavStorage) {
|
if (config.remoteWebDavStorage) {
|
||||||
this.remoteWebDavStorage = new RemoteWebDavStorage(config.remoteWebDavStorage);
|
this.remoteWebDavStorage = new RemoteWebDavStorage(
|
||||||
|
Object.assign({maxContentLength: config.maxUploadFileSize}, config.remoteWebDavStorage)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.periodicCleanDir(this.config.tempPublicDir, this.config.maxTempPublicDirSize, 60*60*1000);//1 раз в час
|
this.periodicCleanDir(this.config.tempPublicDir, this.config.maxTempPublicDirSize, cleanDirPeriod);
|
||||||
this.periodicCleanDir(this.config.uploadDir, this.config.maxUploadPublicDirSize, 60*60*1000);//1 раз в час
|
this.periodicCleanDir(this.config.uploadDir, this.config.maxUploadPublicDirSize, cleanDirPeriod);
|
||||||
|
|
||||||
instance = this;
|
instance = this;
|
||||||
}
|
}
|
||||||
@@ -101,6 +105,19 @@ class ReaderWorker {
|
|||||||
const finishFilename = path.basename(compFilename);
|
const finishFilename = path.basename(compFilename);
|
||||||
wState.finish({path: `/tmp/${finishFilename}`, size: stat.size});
|
wState.finish({path: `/tmp/${finishFilename}`, size: stat.size});
|
||||||
|
|
||||||
|
//лениво сохраним compFilename в удаленном хранилище
|
||||||
|
if (this.remoteWebDavStorage) {
|
||||||
|
(async() => {
|
||||||
|
await utils.sleep(20*1000);
|
||||||
|
try {
|
||||||
|
//log(`remoteWebDavStorage.putFile ${path.basename(compFilename)}`);
|
||||||
|
await this.remoteWebDavStorage.putFile(compFilename);
|
||||||
|
} catch (e) {
|
||||||
|
log(LM_ERR, e.stack);
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log(LM_ERR, e.stack);
|
log(LM_ERR, e.stack);
|
||||||
wState.set({state: 'error', error: e.message});
|
wState.set({state: 'error', error: e.message});
|
||||||
|
|||||||
@@ -1,62 +1,48 @@
|
|||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
|
||||||
const WebDavFS = require('webdav-fs');
|
const { createClient } = require('webdav');
|
||||||
|
|
||||||
class RemoteWebDavStorage {
|
class RemoteWebDavStorage {
|
||||||
constructor(config) {
|
constructor(config) {
|
||||||
const opts = Object.assign({}, config);
|
this.config = Object.assign({}, config);
|
||||||
this.wfs = WebDavFS(config.url, opts);
|
this.config.maxContentLength = this.config.maxContentLength || 10*1024*1024;
|
||||||
|
this.wdc = createClient(config.url, this.config);
|
||||||
}
|
}
|
||||||
|
|
||||||
stat(filename) {
|
_convertStat(data) {
|
||||||
return new Promise((resolve, reject) => {
|
return {
|
||||||
this.wfs.stat(filename, function(err, fileStat) {
|
isDirectory: function() {
|
||||||
if (err)
|
return data.type === "directory";
|
||||||
reject(err);
|
},
|
||||||
resolve(fileStat);
|
isFile: function() {
|
||||||
});
|
return data.type === "file";
|
||||||
});
|
},
|
||||||
|
mtime: (new Date(data.lastmod)).getTime(),
|
||||||
|
name: data.basename,
|
||||||
|
size: data.size || 0
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
writeFile(filename, data) {
|
async stat(filename) {
|
||||||
return new Promise((resolve, reject) => {
|
const stat = await this.wdc.stat(filename);
|
||||||
this.wfs.writeFile(filename, data, 'binary', function(err) {
|
return this._convertStat(stat);
|
||||||
if (err)
|
|
||||||
reject(err);
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unlink(filename) {
|
async writeFile(filename, data) {
|
||||||
return new Promise((resolve, reject) => {
|
return await this.wdc.putFileContents(filename, data, { maxContentLength: this.config.maxContentLength })
|
||||||
this.wfs.unlink(filename, function(err) {
|
|
||||||
if (err)
|
|
||||||
reject(err);
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
readFile(filename) {
|
async unlink(filename) {
|
||||||
return new Promise((resolve, reject) => {
|
return await this.wdc.deleteFile(filename);
|
||||||
this.wfs.readFile(filename, 'binary', function(err, data) {
|
|
||||||
if (err)
|
|
||||||
reject(err);
|
|
||||||
resolve(data);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mkdir(dirname) {
|
async readFile(filename) {
|
||||||
return new Promise((resolve, reject) => {
|
return await this.wdc.getFileContents(filename, { maxContentLength: this.config.maxContentLength })
|
||||||
this.wfs.mkdir(dirname, function(err) {
|
}
|
||||||
if (err)
|
|
||||||
reject(err);
|
async mkdir(dirname) {
|
||||||
resolve();
|
return await this.wdc.createDirectory(dirname);
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async putFile(filename) {
|
async putFile(filename) {
|
||||||
|
|||||||
Reference in New Issue
Block a user