X-Git-Url: https://erislabs.net/gitweb/?a=blobdiff_plain;f=bin%2Fid3fs-tag;h=28b4b6a21d1db7d1129de9025ad2bc131545b2df;hb=262b921378f9edb0a4f0931047fd35232dce78fa;hp=df4091829aece141343ee33bc26b3d313df94d2a;hpb=f81050374f8c7aa1fa368de2dbdea2db3631188b;p=id3fs.git diff --git a/bin/id3fs-tag b/bin/id3fs-tag index df40918..28b4b6a 100755 --- a/bin/id3fs-tag +++ b/bin/id3fs-tag @@ -28,9 +28,10 @@ my $help=0; my ($artist, $album, $track, $tracknum, $year, $v1genre, $comment, $delete_artist, $delete_album, $delete_track, $delete_tracknum, $delete_year, $delete_v1genre, $delete_comment, $delete_all, - $delete_genre, $genre, $add_tags, $delete_tags, @replace_tags); + $delete_genre, $genre, $add_tags, $delete_tags, $overwrite_tagvals, + $delete_tagvals); -Configure(qw(no_ignore_case)); +Configure(qw(bundling no_ignore_case)); my $optret=GetOptions( "verbose|v" => \$verbose, "help|h" => \$help, @@ -52,8 +53,9 @@ my $optret=GetOptions( "delete-genre|delete-all-tags|G" => \$delete_genre, "genre|g|replace-all-tags|R=s" => \$genre, "add-tags|tags|t=s" => \$add_tags, + "overwrite-tagvals|tagvals|o=s" => \$overwrite_tagvals, "delete-tags|T=s" => \$delete_tags, - "replace-tags|r=s{2}" => \@replace_tags, + "delete-tags-with-values|O=s" => \$delete_tagvals, ); usage() if(!@ARGV || !$optret || $help); @@ -66,6 +68,7 @@ while(my $filename=shift @ARGV) next; } my $file=ID3FS::AudioFile->new($filename); + next unless($file); my $changes=0; $changes = do_deletes($file); $changes += do_adds($file); @@ -82,25 +85,29 @@ while(my $filename=shift @ARGV) sub do_deletes { my($file)=@_; - $file->delete_artist() if($delete_artist); - $file->delete_album() if($delete_album); - $file->delete_track() if($delete_track); - $file->delete_tracknum() if($delete_tracknum); - $file->delete_year() if($delete_year); - $file->delete_v1genre() if($delete_v1genre); - $file->delete_comment() if($delete_comment); - $file->delete_all() if($delete_all); - $file->delete_genre() if($delete_genre); - $file->delete_tags($delete_tags) if($delete_tags); - if(@replace_tags && $replace_tags[0]) + if($delete_all) { - $file->delete_tags($replace_tags[0]); + $file->delete_all(); + # we don't want to save the tag if we've deleted it + return 0; } - - return($delete_artist || $delete_album || $delete_track || - $delete_tracknum || $delete_year || $delete_v1genre || - $delete_comment || $delete_all || $delete_genre || - $delete_tags || (@replace_tags && $replace_tags[0])); + $file->delete_artist() if($delete_artist); + $file->delete_album() if($delete_album); + $file->delete_track() if($delete_track); + $file->delete_tracknum() if($delete_tracknum); + $file->delete_year() if($delete_year); + $file->delete_v1genre() if($delete_v1genre); + $file->delete_comment() if($delete_comment); + $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 || defined($genre) || $overwrite_tagvals); + return($donesomething ? 1 : 0); } sub do_adds @@ -113,15 +120,16 @@ 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); - if(@replace_tags && $replace_tags[0]) - { - $file->add_tags($replace_tags[1]); - } - - return($artist || $album || $track || $tracknum || $year || $v1genre || - $comment || $genre || $add_tags || (@replace_tags && $replace_tags[0])); + $file->add_tags($genre) if($genre); + $file->add_tags($overwrite_tagvals) if($overwrite_tagvals); + + my $donesomething=(defined($artist) || defined($album) || + defined($track) || defined($tracknum) || + defined($year) || defined($v1genre) || + defined($comment) || defined($genre) || + defined($add_tags) || defined($overwrite_tagvals)); + return( $donesomething ? 1 : 0 ); } sub do_write @@ -133,6 +141,40 @@ sub do_write sub do_display { my($file)=@_; + my $artist=$file->artist(); + my $album=$file->album(); + my $track=$file->track(); + my $tracknum=$file->tracknum(); + my $year=$file->year(); + my $comment=$file->comment(); + my $v1genre=$file->v1genre(); + my @tags=$file->tags(); + @tags = map { (ref($_) eq "ARRAY") ? join('/', grep {defined;} @{$_}) : $_; } @tags; + if($verbose) + { + print $file->path(), ":\n"; + print " tracknum: $tracknum\n" if($tracknum); + print " artist: $artist\n" if($artist); + print " album: $album\n" if($album); + print " song: $track\n" if($track); + print " year: $year\n" if($year); + print " v1genre: $v1genre\n" if($v1genre); + print " comment: $comment\n" if($comment); + } + else + { + my @fields=($file->path(), $tracknum, $artist, $album, $track, + $year, $v1genre, $comment); + @fields=map { defined($_) ? $_ : ""; } @fields; + print join(':', @fields), "\n"; + } + if(@tags) + { + if($verbose) { print " tags: "; } +# else { print $file->path() . ":tags:"; } + else { print "tags:"; } + print join(", ", @tags), "\n"; + } } sub usage