# HG changeset patch # User Matthew Wild # Date 1263356945 0 # Node ID f7beab89e5a472fd030146f304d6c816ff510ca0 Initial commit diff -r 000000000000 -r f7beab89e5a4 progress.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/progress.lua Wed Jan 13 04:29:05 2010 +0000 @@ -0,0 +1,33 @@ +local ceil, floor = math.ceil, math.floor; +local write = io.write; +module("progress"); + +function new(total) + total = total or 100; + + local anim = { '/', '-', '\\', '|' }; + local anim_max, anim_frame = #anim, 0; + + local completed, percent_complete = 0, 0; + local needs_update = true; + + local function update_data(self, new_completed) + completed = new_completed; + local new_percent_complete = floor(100/(total/completed)); + if percent_complete ~= new_percent_complete then + needs_update = true; + end + percent_complete = new_percent_complete; + return needs_update; + end + + local function update_progress_display() + anim_frame = (anim_frame%anim_max) + 1; + write("\n\027[K0% [", ("="):rep(floor(percent_complete/2)), percent_complete ~= 100 and ">" or "", (" "):rep((50-floor(percent_complete/2))-1), "] 100%"); + write("\n\027[K", anim[anim_frame], " ", percent_complete, "% complete"); --; ETA ", ceil((now()-start_time)/(bytes_completed/bytes_total)/60), "min"); + write("\027[3A\n"); + end + return { refresh = update_progress_display, update = update_data }; +end + +return _M;