transfer fixes

This commit is contained in:
Alexey Kasyanchuk 2018-09-02 02:48:06 +03:00
parent 052b5206f4
commit a539572e0a

View File

@ -158,7 +158,7 @@ class p2p {
if(fs.lstatSync(filePath).isDirectory()) if(fs.lstatSync(filePath).isDirectory())
{ {
const filesList = directoryFilesRecursive(filePath).map(file => ph.relative(this.dataDirectory, file)) const filesList = directoryFilesRecursive(filePath).map(file => ph.relative(this.dataDirectory, file).replace(/\\/g, '/'))
callback({filesList}) callback({filesList})
return return
} }
@ -423,10 +423,13 @@ class p2p {
logT('transfer', 'get file request', path) logT('transfer', 'get file request', path)
return new Promise(async (resolve) => return new Promise(async (resolve) =>
{ {
const filePath = this.dataDirectory + '/' + (targetPath || ph.basename(path)) const filePath = this.dataDirectory + '/' + (targetPath || path)
// recreate directory to file if not exist // recreate directory to file if not exist
await mkdirp(ph.dirname(filePath)) await mkdirp(ph.dirname(filePath))
const fileStream = fs.createWriteStream(filePath) let fileStream
if(!fs.existsSync(filePath) || !fs.lstatSync(filePath).isDirectory())
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) => {
@ -440,7 +443,8 @@ class p2p {
{ {
logT('transfer', 'closing transfering file stream', path) logT('transfer', 'closing transfering file stream', path)
deleteCallback() deleteCallback()
fileStream.end() if(fileStream)
fileStream.end()
if(firstTransfer) // данные передало до этого, значит файл целый if(firstTransfer) // данные передало до этого, значит файл целый
{ {
resolve(true) resolve(true)
@ -454,11 +458,28 @@ class p2p {
{ {
logT('transfer', 'get folder content', filesList) logT('transfer', 'get folder content', filesList)
deleteCallback() deleteCallback()
fileStream.end() const transferFiles = () => {
Promise.all(filesList.map(file => this.file(file, null, addr))).then(() => { Promise.all(filesList.map(file => this.file(file, null, addr))).then(() => {
logT('transfer', 'finish transfer all files from folder') logT('transfer', 'finish transfer all files from folder')
resolve() resolve()
}) })
}
if(fileStream)
fileStream.end(null, null, () => {
fs.unlinkSync(filePath)
transferFiles()
})
else
transferFiles()
return
}
if(!fileStream)
{
logTE('transfer', 'error on file transfer', path, 'cant create description')
deleteCallback()
resolve(false)
return return
} }