recurse down @ARGV instead of treating them as files
authorIan Beckwith <ianb@erislabs.net>
Sat, 6 Nov 2010 18:35:25 +0000 (18:35 +0000)
committerIan Beckwith <ianb@erislabs.net>
Sat, 6 Nov 2010 18:35:25 +0000 (18:35 +0000)
bin/id3fs-tag

index 28b4b6a..0b1f20e 100755 (executable)
 use lib '/home/ianb/projects/id3fs/id3fs/lib'; # FIXME: remove
 use strict;
 use Getopt::Long qw(Configure);
+use File::Find;
 use ID3FS::AudioFile;
 use vars qw($me);
 $me=($0=~/(?:.*\/)?(.*)/)[0];
 
+my @extensions=qw(mp3); # FIXME:  flac ogg
 my $verbose=0;
 my $help=0;
 my ($artist, $album, $track, $tracknum, $year, $v1genre, $comment,
@@ -60,25 +62,35 @@ my $optret=GetOptions(
 
 usage() if(!@ARGV || !$optret || $help);
 
-while(my $filename=shift @ARGV)
+while(my $path=shift @ARGV)
 {
-    unless(-f $filename)
+    unless(-e $path)
     {
-       warn("$me: $filename: not found\n");
+       warn("$me: $path: not found\n");
        next;
     }
-    my $file=ID3FS::AudioFile->new($filename);
-    next unless($file);
-    my $changes=0;
-    $changes =  do_deletes($file);
-    $changes += do_adds($file);
-    if($changes)
-    {
-       do_write($file);
-    }
-    else
+    File::Find::find( {wanted => \&wanted, follow => 1, no_chdir => 1}, $path);
+}
+
+sub wanted
+{
+    my $ext='';
+    if(/.*\.(.*)/) { $ext=lc($1); }
+    if(-f && scalar(grep({ $ext eq lc($_);} @extensions)))
     {
-       do_display($file);
+       my $file=ID3FS::AudioFile->new($_);
+       return unless($file);
+       my $changes=0;
+       $changes =  do_deletes($file);
+       $changes += do_adds($file);
+       if($changes)
+       {
+           do_write($file);
+       }
+       else
+       {
+           do_display($file);
+       }
     }
 }