MP3-Daemon
view release on metacpan or search on metacpan
Daemon/Simple.pm view on Meta::CPAN
map { $adjust++ if $_ < $n; $_ => 1 } # create set
grep { $_ <= $end } # check range
map { ($_ < 0) ? $_ = $end+1 + $_ : $_ } # normalize
grep { /^[-+]?\d+$/ } @_; # integers only
return unless (scalar keys %kill);
for (my $i = 0; $i <= $end; $i++) {
push(@new_playlist, $pl->[$i]) unless ($kill{$i});
}
# assign new list and prepare to reindex if necessary
$self->{playlist} = $pl = \@new_playlist;
$end = scalar(@$pl) - 1;
my $player = $self->{player};
# nothing left?
if ($end < 0) {
$self->{n} = 0;
$player->stop if $player->state;
return;
}
# before current track
if ($adjust) { $n -= $adjust; $self->{n} = $n; }
# at and after current track
if (defined $kill{$x}) {
$n = 0 if ($n > $end);
$self->{n} = $n;
$self->{player}->load($pl->[$n][URL]);
}
}
#_______________________________________
sub ls_short_entry_factory {
my $attr = shift;
return sub {
my $i = shift;
my $entry = shift;
return sprintf('%5s %s', $i, qq("$entry->[$attr]"));
}
}
#_______________________________________
sub ls_long_entry {
my $i = shift;
my $entry = shift;
return sprintf(
'%5s %5s %-30s "%s"',
$i, $entry->[TIME], qq("$entry->[TITLE]"), $entry->[URL]
);
}
# @
#_______________________________________
sub ls {
my $self = shift;
my $client = $self->{client};
my $pl = $self->{playlist};
my %opt;
local @ARGV = @_;
getopts('lf', \%opt);
my $re = shift(@ARGV);
my $attr = defined($opt{f}) ? URL : TITLE;
my $i;
my $n = $self->{n};
my $l = defined($opt{l})
? \&ls_long_entry
: &ls_short_entry_factory($attr);
for ($i = 0 ; $i < scalar(@$pl); $i++) {
defined($re) && do { $pl->[$i][TITLE] =~ /$re/ || next };
if ($i == $n) {
$_ = $l->($i, $pl->[$i]);
s/^ />/;
print $client "$_\n";
} else {
print $client $l->($i, $pl->[$i]), "\n";
}
}
}
# i
#_______________________________________
sub info {
my $self = shift;
my $player = $self->{player};
my $client = $self->{client};
my $mp3_attribute;
my @method = qw(
artist album title year genre url
type layer bitrate samplerate channels mode mode_extension bpf
copyrighted error_protected
);
my $format = "%-15s | \%s\n";
foreach $mp3_attribute (@method) {
printf $client (
$format, $mp3_attribute, $player->$mp3_attribute()
);
}
printf $client ($format, "state",
(qw(stopped paused playing))[$player->state()]);
printf $client ($format, "random", $self->{random});
printf $client ($format, "loop", $self->{loop});
$self->time;
}
# $
#_______________________________________
sub time {
my $self = shift;
my $player = $self->{player};
my $client = $self->{client};
my $format = "%-15s | \%s\n";
my $f = $player->{frame};
printf $client ($format, "elapsed", $f->[2] . " seconds");
printf $client ($format, "remaining", $f->[3] . " seconds");
printf $client ($format, "total", $f->[2] + $f->[3] . " seconds");
printf $client ($format, "track", $self->{n});
( run in 1.272 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )