From 970bbb3887e4d1ca89ee1ca117defaa85c6845e7 Mon Sep 17 00:00:00 2001 From: Olivier Blin Date: Tue, 28 Oct 2008 23:47:21 +0000 Subject: extract progress code in a new MDV::Draklive::Progress object --- lib/MDV/Draklive/Progress.pm | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 lib/MDV/Draklive/Progress.pm (limited to 'lib') diff --git a/lib/MDV/Draklive/Progress.pm b/lib/MDV/Draklive/Progress.pm new file mode 100644 index 0000000..128ffe3 --- /dev/null +++ b/lib/MDV/Draklive/Progress.pm @@ -0,0 +1,31 @@ +package MDV::Draklive::Progress; + +use POSIX qw(strftime); + +sub new { + my ($class, $total, $time, $o_exp_divide) = @_; + bless { + total => $total, + current => 0, + start_time => $time, + exp_divide => $o_exp_divide, + maxl => length($total) - $o_exp_divide, + }, $class; +} + +sub show { + my ($progress, $time) = @_; + my $elapsed_time = $time - $progress->{start_time}; + my $eta = $progress->{current} ? int($elapsed_time*$progress->{total}/$progress->{current}) : -1; + printf("\r%3d%% (%$progress->{maxl}s/%-$progress->{maxl}s), %8s/%8s (ETA)", + int(100*$progress->{current}/$progress->{total}), + (map { substr($_, 0, length($_)-$progress->{exp_divide}) } $progress->{current}, $progress->{total}), + (map { POSIX::strftime("%H:%M:%S", gmtime($_)) } $elapsed_time, $eta)); +} + +sub end { + my ($_progress) = @_; + print "\n"; +} + +1; -- cgit v1.2.1