X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=bin%2Fid3fs-tag;h=0b1f20e5fa9d3cf2a1f3a2d4468b046c6d17cba5;hb=f768e5fc4f33962bfac1142c546776cc0e239ec0;hp=f4b0df281aa624055f31a87c1c2999ac2e563cec;hpb=7e09bd0c9b6191c2b9a9d4aefd3b638de22da6f1;p=id3fs.git diff --git a/bin/id3fs-tag b/bin/id3fs-tag index f4b0df2..0b1f20e 100755 --- a/bin/id3fs-tag +++ b/bin/id3fs-tag @@ -19,10 +19,12 @@ 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,24 +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); - 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); + } } } @@ -97,15 +110,15 @@ sub do_deletes $file->delete_year() if($delete_year); $file->delete_v1genre() if($delete_v1genre); $file->delete_comment() if($delete_comment); - $file->delete_genre() if($delete_genre); + $file->delete_genre() if($delete_genre || $genre); $file->delete_tags($delete_tags, 0) if($delete_tags); $file->delete_tags($delete_tagvals, 1) if($delete_tagvals); $file->delete_tags($overwrite_tagvals, 1) if($overwrite_tagvals); - my $donesomething=($delete_artist || $delete_album || $delete_track || - $delete_tracknum || $delete_year || $delete_v1genre || - $delete_comment || $delete_genre || $delete_tags || - $delete_tagvals || $overwrite_tagvals); + my $donesomething=($delete_artist || $delete_album || $delete_track || + $delete_tracknum || $delete_year || $delete_v1genre || + $delete_comment || $delete_genre || $delete_tags || + $delete_tagvals || defined($genre) || $overwrite_tagvals); return($donesomething ? 1 : 0); } @@ -119,8 +132,8 @@ sub do_adds $file->year($year) if($year); $file->v1genre($v1genre) if($v1genre); $file->comment($comment) if($comment); - $file->genre($genre) if($genre); $file->add_tags($add_tags) if($add_tags); + $file->add_tags($genre) if($genre); $file->add_tags($overwrite_tagvals) if($overwrite_tagvals); my $donesomething=(defined($artist) || defined($album) || @@ -170,7 +183,8 @@ sub do_display if(@tags) { if($verbose) { print " tags: "; } - else { print $file->path() . ":tags:"; } +# else { print $file->path() . ":tags:"; } + else { print "tags:"; } print join(", ", @tags), "\n"; } }