-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathcommand.js
96 lines (91 loc) · 2.98 KB
/
command.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
const cmd = require('commander')
const http = require('http')
const pkg = require('../package.json')
module.exports = new (class Command {
constructor (node) {
cmd.name('offs')
cmd.version(pkg.version, '-v, --version')
cmd.option('-t, --terminal', 'Run in Terminal Only (without GUI)')
cmd.option('-p, --path [dir]', 'Initial path for the application')
}
parse() {
cmd.parse(process.argv)
return cmd
}
exporter (payload) {
let url = OffUrl.parse(payload.url)
let filename = path.join(payload.location, url.fileName)
let streamLength = url.streamLength
let percent = 0
let size = 0
let file = {filename, percent, size, streamLength}
if (url.contentType === 'offsystem/directory') {
file.filename = file.filename.replace('.ofd', '')
let cb = (response) => {
collect(response, async (err, data) => {
if (err) {
return console.error(err)
}
let dir= url.fileName.replace('.ofd', '')
mkdirp.sync(path.join(payload.location, dir))
let ofd = JSON.parse(data)
let contents = Object.entries(ofd)
for (let [, value] of contents) {
let url = OffUrl.parse(value)
file.streamLength += url.streamLength
}
file.size += data.length
file.percent = Math.floor((file.size/file.streamLength) * 100)
let i = -1
let next = async () => {
i++
if (i < contents.length) {
let [key, value] = contents[i]
let cb = (response) => {
let fp = path.parse(key)
if (fp.dir) {
mkdirp.sync(path.join(payload.location, dir, fp.dir))
}
let ws = fs.createWriteStream(path.join(payload.location, dir, key))
response.on('data', async (chunk) => {
file.size += chunk.length
file.percent = Math.floor((file.size/file.streamLength) * 100)
})
ws.on('finish', () => {
return next()
})
ws.on('error', (err) => {
console.error(err)
})
response.pipe(ws)
}
http.get(value, cb).on('error', (err) => {
console.error(err)
})
}
}
next()
})
}
http.get(`${payload.url}?ofd=raw`, cb).on('error', (err) => {
console.error(err)
})
} else {
let cb = (response) => {
let ws = fs.createWriteStream(filename)
ws.on('error', (err) => {
console.error(err)
})
response.on('data', (chunk) => {
file.size += chunk.length
file.percent = Math.floor((file.size/file.streamLength) * 100)
console.error(err)
})
response.pipe(ws)
}
http.get(payload.url, cb).on('error', (err) => {
console.error(err)
})
}
}
})()