From: epg <> Date: Sun, 5 Dec 2004 05:38:18 +0000 (+0000) Subject: Add support for a post-processor hook. X-Git-Url: https://diplodocus.org/git/flac-archive/commitdiff_plain/a985282778e722a8f7753c277030bd7456f095fa?hp=d5d85722f4fb0fc6ca61102b397aa51a96bddcc6 Add support for a post-processor hook. (fa-flacd): Document the hook. (flac): Execute and remove the hook if it exists before removing the temporary directory. (fa-rip): (make_post_processor): New function to create the post-processor file, if defined. (MAIN): Take new -p/--post-processor option. --- diff --git a/fa-flacd b/fa-flacd index 3e9e7cb..50a936c 100755 --- a/fa-flacd +++ b/fa-flacd @@ -108,11 +108,18 @@ sub flac { 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; } @@ -241,6 +248,17 @@ the "log" file. Finally, B moves the "cue" and "log" files to the artist directory (named by album) and removes the temporary directory. +If the temporary directory contains an executable file named +"post-processor", B 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, 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, 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 diff --git a/fa-rip b/fa-rip index 1a9bc2a..916c050 100755 --- a/fa-rip +++ b/fa-rip @@ -9,7 +9,7 @@ B - rip a CD for B =head1 SYNOPSIS -B [B<-d> I] [B<-t> I] +B [B<-d> I] [B<-p> I [B<-t> I] =cut @@ -20,6 +20,7 @@ use Env qw( CDDEV ); +use Fcntl qw(O_CREAT O_WRONLY); use File::Temp; use Getopt::Long qw(:config gnu_getopt no_ignore_case); use POSIX ':sys_wait_h'; @@ -136,13 +137,26 @@ sub rip { die; } +sub make_post_processor { + my $command = shift; + + defined($command) or return; + + sysopen(F, 'post-processor', O_CREAT | O_WRONLY, 0555) + or die("sysopen(post-processor, O_CREAT | O_WRONLY, 0555): $!"); + print(F $command, ' "$@"', "\n"); + close(F) or die("close(post-processor, O_CREAT | O_WRONLY, 0555): $!"); +} + MAIN: { + my $post_processor; my $trackcount; my $help; my $tempdir; GetOptions( 'device|d=s' => \$CDDEV, + 'post-processor|p=s', \$post_processor, 'tracks|t=i' => \$trackcount, 'help|h|?' => \$help, ) or pod2usage(); @@ -152,6 +166,7 @@ MAIN: { $tempdir = File::Temp::tempdir('flac-archive.XXXXXXXXXX'); chdir($tempdir) or die("chdir($tempdir): $!"); + make_post_processor($post_processor); $trackcount = mkcue($CDDEV, $trackcount); tags($CDDEV, $trackcount); rip($CDDEV, $trackcount); @@ -183,6 +198,12 @@ have to fill out the candidate-tags-0 template. Use I as the CD-ROM device, instead of the default "/dev/cdrom" or the environment variable CDDEV. +=item B<-p> [B<--post-processor>] I + +Create a "post-processor" file in the temporary directory containing +the line 'I "$@"'. See B's man page for +information about this hook. + =item B<-t> [B<--tracks>] I Archive only the first I tracks. This is handy for