-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
executable file
·71 lines (60 loc) · 1.61 KB
/
index.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
#!/usr/bin/env node
'use strict'
const fs = require('fs')
const os = require('os')
const path = require('path')
const prompt = require('prompt')
const _progress = require('cli-progress')
const download = require('cheetah-downloader')
const bar1 = new _progress.Bar({
format: '[{bar}] {percentage}% | ETA: {remain} | Speed: {speed} kb/s'
}, _progress.Presets.shades_grey)
function milliToX (millis) {
var hours = Math.floor(millis / 36e5)
var mins = Math.floor((millis % 36e5) / 6e4)
var secs = Math.floor((millis % 6e4) / 1000)
return hours + ':' + mins + ':' + secs
}
const targetDir = process.argv[2] || path.join(os.homedir(), '/Downloads')
prompt.message = '>'
prompt.start()
try {
fs.accessSync(targetDir, fs.W_OK)
} catch (e) {
console.log('Target folder not accessible:', e.code, targetDir)
return
}
prompt.get({
properties: {
url: {
type: 'string',
required: true,
message: 'Please enter a valid URL'
}
}
}, function(err, res) {
try {
const tempDir = os.tmpdir() + '/cheetah-cli/'
fs.mkdir(tempDir, {}, () => {})
const cheetah = download(res.url, targetDir, { tempDir })
cheetah
.on('progress', function (progress) {
var remain = milliToX(progress.timeRemaining * 1000)
bar1.update(progress.percent, {
remain: remain,
speed: progress.speed
})
})
.on('complete', function(res) {
bar1.stop()
console.log('Downloaded at:\n', res.path)
})
.start()
bar1.start(100, 0, {
remain: '0',
speed: '0'
})
} catch (e) {
console.log('Some error occurred', e)
}
})