]> diplodocus.org Git - flac-archive/blobdiff - flac2mp3
Need the g (global) flag on that substitution operation.
[flac-archive] / flac2mp3
index 2231b1f8d23a58b98267e963a6c6647ba3b6824e..17452bfc04b659f79320510e4b3846a1de273bf4 100755 (executable)
--- a/flac2mp3
+++ b/flac2mp3
@@ -22,13 +22,30 @@ and DATE tags.
 use strict;
 use warnings;
 
 use strict;
 use warnings;
 
+use POSIX ':sys_wait_h';
 use Pod::Usage;
 
 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 {
 sub tformat {
-    my $min = shift;
-    my $sec = shift;
-    my $hun = shift;
-    return "$min:$sec.$hun";
+    return sprintf('%02d:%02d.%02d', @_);
 }
 
 sub get_decode_args {
 }
 
 sub get_decode_args {
@@ -48,10 +65,10 @@ sub get_decode_args {
         if (defined($next)) {
             if ($next->[2] == 0) {
                 if ($next->[1] == 0) {
         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,
                 } else {
                     push(@$arg, '--until=' . tformat($next->[0], $next->[1] - 1,
-                                                    99));
+                                                    74));
                 }
             } else {
                 push(@$arg, '--until=' . tformat($next->[0], $next->[1],
                 }
             } else {
                 push(@$arg, '--until=' . tformat($next->[0], $next->[1],
@@ -75,7 +92,8 @@ sub get_tags {
     my $date;
     my @titles;
 
     my $date;
     my @titles;
 
-    open(TAGS, '-|', 'metaflac', '--export-vc-to=-', $fn);
+    open(TAGS, '-|', 'metaflac', '--export-vc-to=-', $fn)
+      or die("open(metaflac --export-vc-to=- $fn): $!");
     while (<TAGS>) {
         chomp;
 
     while (<TAGS>) {
         chomp;
 
@@ -87,11 +105,11 @@ sub get_tags {
             $album = $value;
         } elsif (/^DATE=/) {
             $date = $value;
             $album = $value;
         } elsif (/^DATE=/) {
             $date = $value;
-        } elsif (/TITLE=/) {
+        } elsif (/TITLE/) {
             push(@titles, $value);
         }
     }
             push(@titles, $value);
         }
     }
-    close(TAGS) or die("close($fn): $!");
+    close(TAGS) or die("close(metaflac --export-vc-to=- $fn): $?");
 
     return ($artist, $album, $date, @titles);
 }
 
     return ($artist, $album, $date, @titles);
 }
@@ -105,16 +123,22 @@ sub flac2mp3 {
     my $track = shift;
     my $skip_arg = shift;
     my $until_arg = shift;
     my $track = shift;
     my $skip_arg = shift;
     my $until_arg = shift;
+    my $outfile;
+
+    # 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;
+    }
 
 
-    my $outfile = sprintf("$artist ($album) \%02s $title.mp3", $track);
+    $outfile = sprintf("$artist ($album) \%02s $title.mp3", $track);
     $outfile =~ s/\//_/g;
     $outfile =~ s/\//_/g;
-    $outfile =~ s/:/_/g;
-    $outfile =~ s/'/_/g;
-    $outfile =~ s/"/_/g;
 
 
-    # XXX
     $until_arg ||= '';
     $until_arg ||= '';
-    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: {
 }
 
 MAIN: {