summaryrefslogtreecommitdiffstats
path: root/lib/MGA/DrakISO/Progress.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/MGA/DrakISO/Progress.pm')
-rw-r--r--lib/MGA/DrakISO/Progress.pm31
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;