Initial commit

Wed, 13 Jan 2010 04:29:05 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Wed, 13 Jan 2010 04:29:05 +0000
changeset 0
f7beab89e5a4
child 1
7279a9d08042

Initial commit

progress.lua file | annotate | diff | comparison | revisions
--- /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;

mercurial