/usr/local/CPAN/dvdrip/Video/DVDRip/Term/Progress.pm
# $Id: Progress.pm 2187 2006-08-16 19:34:38Z joern $
#-----------------------------------------------------------------------
# Copyright (C) 2001-2006 Jörn Reder <joern AT zyn.de>.
# All Rights Reserved. See file COPYRIGHT for details.
#
# This module is part of Video::DVDRip, which is free software; you can
# redistribute it and/or modify it under the same terms as Perl itself.
#-----------------------------------------------------------------------
package Video::DVDRip::Term::Progress;
use base qw( Video::DVDRip::Base );
use Locale::TextDomain qw (video.dvdrip);
use Carp;
use strict;
my @rot = ( "|", "/", "-", "\\" );
sub rot_idx { shift->{rot_idx} }
sub quiet { shift->{quiet} }
sub set_quiet { shift->{quiet} = $_[1] }
sub set_rot_idx { shift->{rot_idx} = $_[1] }
sub new {
my $class = shift;
my %par = @_;
my ($quiet) = @par{'quiet'};
return bless { quiet => $quiet }, $class;
}
sub update {
my $self = shift;
my %par = @_;
my ( $value, $label ) = @par{ 'value', 'label' };
return if $self->quiet;
my ( $info, $percent ) = split( ":", $label, 2 );
my $width = 76;
my $cnt = int( $width * $value );
$cnt = $width if $cnt > $width;
my $rot_idx = $self->rot_idx;
my $rot = $rot[$rot_idx];
++$rot_idx;
$rot_idx = 0 if $rot_idx == @rot;
$self->set_rot_idx($rot_idx);
my $clean = chr(27) . "[K";
my $up = chr(27) . "[1A";
my $yel = chr(27) . "[33m";
my $bgw = chr(27) . "[47m";
my $reset = chr(27) . "[0m";
my $bld = chr(27) . "[1m";
my $rev = chr(27) . "[30;47;1m";
my $prg = chr(27) . "[30;42m";
my $progress = "[$prg"
. ( "·" x $cnt )
. $reset
. ( "·" x ( $width - $cnt ) ) . "]";
$rot = "$rev$rot$reset";
$rot = ">" if $cnt == $width;
#-- some intelligence for l10n to align the words
#-- "Job" and "Progress" properly
my $word_job = __("Job") . ":";
my $word_prg = __("Progress") . ":";
my $len_job = length($word_job);
my $len_prg = length($word_prg);
my $max = $len_job > $len_prg ? $len_job : $len_prg;
$word_job = sprintf( "%-${max}s", $word_job );
$word_prg = sprintf( "%-${max}s", $word_prg );
print "\r$rot $progress$clean\n";
print "\r ${yel}$word_job${reset} $bld$info$reset$clean\n";
print "\r ${yel}$word_prg${reset} $bld$percent$reset$clean\n\r$up$up$up";
1;
}
sub is_active {
0;
}
sub open {
1;
}
sub close {
my $self = shift;
return if $self->quiet;
print "\n\n\n\n";
1;
}
1;