You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
1.8 KiB
JavaScript

async function getList (ftp, src) {
return new Promise(resolve => {
ftp.list(src, (err, list) => {
if (err) {
console.error(err)
resolve(false)
} else {
resolve(list)
}
})
})
}
async function rmDir (ftp, src, recusive = true) {
return new Promise(resolve => {
ftp.rmdir(src, recusive, err => {
if (err) {
console.error(err)
resolve(false)
} else {
resolve(true)
}
})
})
}
async function deleteFile (ftp, src) {
return new Promise(resolve => {
ftp.delete(src, err => {
if (err) {
console.error(err)
resolve(false)
} else {
resolve(true)
}
})
})
}
async function emptyDir (ftp, src, except = []) {
const list = await getList(ftp, src)
for (let i = 0, listNum = list.length; i < listNum; i++) {
const { type, name } = list[i]
if (type === 'd' && (name === '.' || name === '..')) continue
if (except.find(n => n === name)) continue
const fullSrc = `${src}${name}`
if (type === 'd') {
if (!await rmDir(ftp, fullSrc, true)) return false
} else {
if (!await deleteFile(ftp, fullSrc)) return false
}
}
return true
}
async function put (ftp, src, dest) {
return new Promise(resolve => {
ftp.put(src, dest, err => {
if (err) {
console.error(err)
resolve(false)
} else {
resolve(true)
}
})
})
}
async function mkDir (ftp, src, recusive = true) {
return new Promise(resolve => {
ftp.mkdir(src, recusive, err => {
if (err) {
console.error(err)
resolve(false)
} else {
resolve(true)
}
})
})
}
module.exports = {
put,
rmDir,
mkDir,
getList,
emptyDir,
deleteFile
}