feat(p2p): folder transfer feature
This commit is contained in:
parent
39e2dd71dc
commit
8ee277e764
30
package-lock.json
generated
30
package-lock.json
generated
@ -8536,14 +8536,12 @@
|
|||||||
"balanced-match": {
|
"balanced-match": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"brace-expansion": {
|
"brace-expansion": {
|
||||||
"version": "1.1.11",
|
"version": "1.1.11",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"balanced-match": "^1.0.0",
|
"balanced-match": "^1.0.0",
|
||||||
"concat-map": "0.0.1"
|
"concat-map": "0.0.1"
|
||||||
@ -8558,20 +8556,17 @@
|
|||||||
"code-point-at": {
|
"code-point-at": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"concat-map": {
|
"concat-map": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"console-control-strings": {
|
"console-control-strings": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"core-util-is": {
|
"core-util-is": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
@ -8688,8 +8683,7 @@
|
|||||||
"inherits": {
|
"inherits": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"ini": {
|
"ini": {
|
||||||
"version": "1.3.5",
|
"version": "1.3.5",
|
||||||
@ -8701,7 +8695,6 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"number-is-nan": "^1.0.0"
|
"number-is-nan": "^1.0.0"
|
||||||
}
|
}
|
||||||
@ -8716,7 +8709,6 @@
|
|||||||
"version": "3.0.4",
|
"version": "3.0.4",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"brace-expansion": "^1.1.7"
|
"brace-expansion": "^1.1.7"
|
||||||
}
|
}
|
||||||
@ -8724,14 +8716,12 @@
|
|||||||
"minimist": {
|
"minimist": {
|
||||||
"version": "0.0.8",
|
"version": "0.0.8",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"minipass": {
|
"minipass": {
|
||||||
"version": "2.2.4",
|
"version": "2.2.4",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"safe-buffer": "^5.1.1",
|
"safe-buffer": "^5.1.1",
|
||||||
"yallist": "^3.0.0"
|
"yallist": "^3.0.0"
|
||||||
@ -8750,7 +8740,6 @@
|
|||||||
"version": "0.5.1",
|
"version": "0.5.1",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"minimist": "0.0.8"
|
"minimist": "0.0.8"
|
||||||
}
|
}
|
||||||
@ -8831,8 +8820,7 @@
|
|||||||
"number-is-nan": {
|
"number-is-nan": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"object-assign": {
|
"object-assign": {
|
||||||
"version": "4.1.1",
|
"version": "4.1.1",
|
||||||
@ -8844,7 +8832,6 @@
|
|||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"wrappy": "1"
|
"wrappy": "1"
|
||||||
}
|
}
|
||||||
@ -8966,7 +8953,6 @@
|
|||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"code-point-at": "^1.0.0",
|
"code-point-at": "^1.0.0",
|
||||||
"is-fullwidth-code-point": "^1.0.0",
|
"is-fullwidth-code-point": "^1.0.0",
|
||||||
@ -11962,7 +11948,7 @@
|
|||||||
},
|
},
|
||||||
"mkdirp": {
|
"mkdirp": {
|
||||||
"version": "0.5.1",
|
"version": "0.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
|
"resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
|
||||||
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
|
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
|
||||||
"requires": {
|
"requires": {
|
||||||
"minimist": "0.0.8"
|
"minimist": "0.0.8"
|
||||||
|
@ -130,6 +130,7 @@
|
|||||||
"lodash": "^4.17.5",
|
"lodash": "^4.17.5",
|
||||||
"material-ui": "^0.20.2",
|
"material-ui": "^0.20.2",
|
||||||
"mime": "^2.3.1",
|
"mime": "^2.3.1",
|
||||||
|
"mkdirp": "^0.5.1",
|
||||||
"moment": "^2.20.1",
|
"moment": "^2.20.1",
|
||||||
"mysql": "^2.15.0",
|
"mysql": "^2.15.0",
|
||||||
"nat-upnp": "^1.1.1",
|
"nat-upnp": "^1.1.1",
|
||||||
|
@ -9,6 +9,9 @@ const EventEmitter = require('events');
|
|||||||
const _ = require('lodash')
|
const _ = require('lodash')
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const ph = require('path')
|
const ph = require('path')
|
||||||
|
const directoryFilesRecursive = require('./directoryFilesRecursive')
|
||||||
|
const {promisify} = require('util');
|
||||||
|
const mkdirp = promisify(require('mkdirp'))
|
||||||
|
|
||||||
class p2p {
|
class p2p {
|
||||||
constructor(send = () => {})
|
constructor(send = () => {})
|
||||||
@ -153,6 +156,13 @@ class p2p {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(fs.lstatSync(filePath).isDirectory())
|
||||||
|
{
|
||||||
|
const filesList = directoryFilesRecursive(filePath)
|
||||||
|
callback({filesList})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
let readable = new fs.ReadStream(filePath)
|
let readable = new fs.ReadStream(filePath)
|
||||||
logT('transfer', 'server transfer file', path)
|
logT('transfer', 'server transfer file', path)
|
||||||
readable.on('data', (chunk) => {
|
readable.on('data', (chunk) => {
|
||||||
@ -411,9 +421,12 @@ class p2p {
|
|||||||
}
|
}
|
||||||
|
|
||||||
logT('transfer', 'get file request', path)
|
logT('transfer', 'get file request', path)
|
||||||
return new Promise((resolve) =>
|
return new Promise(async (resolve) =>
|
||||||
{
|
{
|
||||||
const fileStream = fs.createWriteStream(this.dataDirectory + '/' + (targetPath || ph.basename(path)))
|
const filePath = this.dataDirectory + '/' + (targetPath || ph.basename(path))
|
||||||
|
// recreate directory to file if not exist
|
||||||
|
await mkdirp(ph.dirname(filePath))
|
||||||
|
const fileStream = fs.createWriteStream(filePath)
|
||||||
let peer = null
|
let peer = null
|
||||||
let firstTransfer = false
|
let firstTransfer = false
|
||||||
let deleteCallback = (remotePeer || this).emit('file', {path}, (chunk, nil, addr) => {
|
let deleteCallback = (remotePeer || this).emit('file', {path}, (chunk, nil, addr) => {
|
||||||
@ -435,7 +448,20 @@ class p2p {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const {data} = chunk
|
const {data, filesList} = chunk
|
||||||
|
|
||||||
|
if(filesList)
|
||||||
|
{
|
||||||
|
logT('transfer', 'get folder content', filesList)
|
||||||
|
deleteCallback()
|
||||||
|
fileStream.end()
|
||||||
|
Promise.all(filesList.map(file => this.file(file, null, addr))).then(() => {
|
||||||
|
logT('transfer', 'finish transfer all files from folder')
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if(!data || data.type !== 'Buffer')
|
if(!data || data.type !== 'Buffer')
|
||||||
{
|
{
|
||||||
logTE('transfer', 'error on file transfer', path)
|
logTE('transfer', 'error on file transfer', path)
|
||||||
|
Loading…
Reference in New Issue
Block a user