use POSIX ':sys_wait_h';
use Pod::Usage;
+my $debug;
my $verbose;
my @jobs;
my @finished;
my $value;
my $artist;
my $album;
+ my $discnum;
my @tags;
verbose("Opening tags file $fn\n");
($tag, $value) = split(/=/, $_, 2);
- if (/^ARTIST=/) {
+ if (/^ARTIST=/i) {
$artist = $value;
verbose("ARTIST $artist from $fn\n");
- } elsif (/^ALBUM=/) {
+ } elsif (/^ALBUM=/i) {
$album = $value;
- verbose("ALBUM $album from $fn\n");
+ verbose("ALBUM $album from $fn\n"); # cperl-mode sucks "
+ } elsif (/^DISCNUMBER=/i) {
+ $discnum = int($value);
+ verbose("DISCNUMBER $discnum from $fn\n");
}
}
close(TAGS) or die("close($fn): $!");
- return ($artist, $album, @tags);
+ return ($artist, $album, $discnum, @tags);
}
# Process the fa-rip output in the directory DIR.
my $dir = shift;
my $artist;
my $album;
+ my $discnum;
my @tags;
my $outfile;
my $status;
rename("$dir/tags", "$dir/using-tags")
or die("rename($dir/tags, $dir/using-tags): $!");
- ($artist, $album, @tags) = get_tags("$dir/using-tags");
+ ($artist, $album, $discnum, @tags) = get_tags("$dir/using-tags");
verbose("mkdir($artist)\n");
-d $artist or mkdir($artist) or die("mkdir($artist): $!");
chdir($dir) or die("chdir($dir): $!");
$outfile = "$album";
+ defined($discnum) and $outfile .= " (disc $discnum)";
$outfile =~ s/\//_/g;
verbose("Running flac\n");
rename('log', "../$artist/$outfile.log")
or die("rename(log, ../$artist/$outfile.log): $!");
chdir('..') or die("chdir(..): $!");
- rmdir($dir) or die("rmdir($dir): $!");
rename("$artist/$outfile.flac-tmp", "$artist/$outfile.flac")
or die("rename($artist/$outfile.flac-tmp, $artist/$outfile.flac): $!");
+ if (-x "$dir/post-processor") {
+ verbose("Running './$dir/post-processor $artist/$outfile.flac'\n");
+ system("./$dir/post-processor", "$artist/$outfile.flac");
+ unlink("$dir/post-processor") or die("unlink($dir/post-processor): $!");
+ }
+
+ rmdir($dir) or die("rmdir($dir): $!");
+
return 0;
}
my $dir = shift;
my $pid;
- $pid = fork();
- if (not defined($pid)) {
- die("fork: $!");
- } elsif ($pid == 0) {
+ if (not $debug) {
+ $pid = fork();
+ if (not defined($pid)) {
+ die("fork: $!");
+ }
+ }
+
+ if ($debug or $pid == 0) {
$SIG{CHLD} = 'IGNORE';
open(STDERR, ">$dir/log") or die("open(STDERR, >$dir/log): $!");
exit(flac($dir));
$jobs = 4;
GetOptions(
+ 'debug|X' => \$debug,
'jobs|j=i' => \$jobs,
'verbose|v' => \$verbose,
'help|h|?' => \$help,
to the artist directory (named by album) and removes the temporary
directory.
+If the temporary directory contains an executable file named
+"post-processor", B<fa-flacd> executes that file with the relative
+path to the output FLAC file as an argument. The output files are in
+their final location when "post-processor" starts. Possible uses are
+running B<flac2mp3>, moving the output files to a different location,
+removing the lock file, or adding to a database. The standard input,
+output, and error streams are inherited from B<fa-flacd>, so they may
+be connected to anything from a tty to /dev/null. This means that you
+may want to redirect these streams, if you want to save them or do any
+logging.
+
=head1 OPTIONS
=over 4