diff options
Diffstat (limited to 'lib/MGA/DrakISO/Progress.pm')
-rw-r--r-- | lib/MGA/DrakISO/Progress.pm | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/MGA/DrakISO/Progress.pm b/lib/MGA/DrakISO/Progress.pm new file mode 100644 index 0000000..40e442e --- /dev/null +++ b/lib/MGA/DrakISO/Progress.pm @@ -0,0 +1,31 @@ +package MGA::DrakISO::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; |