Files: d5c6f9521130fcae13928a86e3f39d88e2586342 / lib / progress.js
1042 bytesRaw
1 | //poll the progress() function and report how much waiting there is... |
2 | //just whipped this up, obviously room for improvement here. |
3 | module.exports = function (progress) { |
4 | function bar (r) { |
5 | var s = '\r', M = 50 |
6 | for(var i = 0; i < M; i++) |
7 | s += i < M*r ? '*' : '.' |
8 | |
9 | return s |
10 | } |
11 | |
12 | function round (n, p) { |
13 | return Math.round(n * p) / p |
14 | } |
15 | |
16 | function percent (n) { |
17 | return (round(n, 1000)*100).toString().substring(0, 4)+'%' |
18 | } |
19 | |
20 | function rate (prog) { |
21 | if(prog.target == prog.current) return 1 |
22 | return (prog.current - prog.start) / (prog.target - prog.start) |
23 | } |
24 | |
25 | var prog = -1 |
26 | var int = setInterval(function () { |
27 | var p = progress() |
28 | var r = 1, c = 0 |
29 | var tasks = [] |
30 | for(var k in p) { |
31 | var _r = rate(p[k]) |
32 | if(_r < 1) |
33 | tasks.push(k+':'+percent(_r)) |
34 | r = Math.min(_r, r) |
35 | c++ |
36 | } |
37 | if(r != prog) { |
38 | prog = r |
39 | var msg = tasks.join(', ') |
40 | process.stdout.write('\r'+bar(prog) + ' ('+msg+')\x1b[K\r') |
41 | } |
42 | }, 333) |
43 | int.unref && int.unref() |
44 | } |
45 | |
46 | |
47 | |
48 |
Built with git-ssb-web