progress.lua

changeset 0
f7beab89e5a4
child 3
d3e20e89d06b
equal deleted inserted replaced
-1:000000000000 0:f7beab89e5a4
1 local ceil, floor = math.ceil, math.floor;
2 local write = io.write;
3 module("progress");
4
5 function new(total)
6 total = total or 100;
7
8 local anim = { '/', '-', '\\', '|' };
9 local anim_max, anim_frame = #anim, 0;
10
11 local completed, percent_complete = 0, 0;
12 local needs_update = true;
13
14 local function update_data(self, new_completed)
15 completed = new_completed;
16 local new_percent_complete = floor(100/(total/completed));
17 if percent_complete ~= new_percent_complete then
18 needs_update = true;
19 end
20 percent_complete = new_percent_complete;
21 return needs_update;
22 end
23
24 local function update_progress_display()
25 anim_frame = (anim_frame%anim_max) + 1;
26 write("\n\027[K0% [", ("="):rep(floor(percent_complete/2)), percent_complete ~= 100 and ">" or "", (" "):rep((50-floor(percent_complete/2))-1), "] 100%");
27 write("\n\027[K", anim[anim_frame], " ", percent_complete, "% complete"); --; ETA ", ceil((now()-start_time)/(bytes_completed/bytes_total)/60), "min");
28 write("\027[3A\n");
29 end
30 return { refresh = update_progress_display, update = update_data };
31 end
32
33 return _M;

mercurial