use strict;
use warnings;
+use POSIX ':sys_wait_h';
use Pod::Usage;
+sub run_or_die {
+ my $command = shift;
+ my $status;
+
+ $status = system($command);
+
+ if (WIFEXITED($status)) {
+ if (($status = WEXITSTATUS($status)) != 0) {
+ die("$command exited with status $status");
+ }
+ } elsif (WIFSIGNALED($status)) {
+ die("$command killed with signal ", WTERMSIG($status));
+ } elsif (WIFSTOPPED($status)) {
+ die("$command stopped with signal ", WSTOPSIG($status));
+ } else {
+ die("Major horkage on system($command): \$? = $? \$! = $!");
+ }
+}
+
sub tformat {
- my $min = shift;
- my $sec = shift;
- my $hun = shift;
- return "$min:$sec.$hun";
+ return sprintf('%02d:%02d.%02d', @_);
}
sub get_decode_args {
if (defined($next)) {
if ($next->[2] == 0) {
if ($next->[1] == 0) {
- push(@$arg, '--until=' . tformat($next->[0] - 1, 59, 99));
+ push(@$arg, '--until=' . tformat($next->[0] - 1, 59, 74));
} else {
push(@$arg, '--until=' . tformat($next->[0], $next->[1] - 1,
- 99));
+ 74));
}
} else {
push(@$arg, '--until=' . tformat($next->[0], $next->[1],
$album = $value;
} elsif (/^DATE=/) {
$date = $value;
- } elsif (/TITLE=/) {
+ } elsif (/TITLE/) {
push(@titles, $value);
}
}
my $track = shift;
my $skip_arg = shift;
my $until_arg = shift;
+ my $outfile;
- my $outfile = sprintf("$artist ($album) \%02s $title.mp3", $track);
- for ($outfile) {
- s/\//_/g;
- s/:/_/g;
- s/'/_/g;
- s/"/_/g;
+ # We'll be putting these in single quotes, so we need to escape
+ # any single quotes in the filename by closing the quote ('),
+ # putting an escaped quote (\'), and then reopening the quote (').
+ for ($fn, $title, $artist, $album, $date) {
+ s/'/'\\''/g;
}
+ $outfile = sprintf("$artist ($album) \%02s $title.mp3", $track);
+ $outfile =~ s/\//_/g;
+
$until_arg ||= '';
- # XXX
- system("flac -cd $skip_arg $until_arg '$fn' | lame --preset standard --tt '$title' --ta '$artist' --tl '$album' --ty '$date' --tn $track - '$outfile'");
+ run_or_die(join(' ', "flac -cd $skip_arg $until_arg '$fn'",
+ " | lame --preset standard --tt '$title' --ta '$artist'",
+ " --tl '$album' --ty '$date' --tn $track - '$outfile'"));
}
MAIN: {