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));
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);
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_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;
}
- $file->delete_all() if($delete_all);
-
- # we don't want to save the tag if we've deleted it
- return 0 if($delete_all);
+ $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);
+ $file->delete_tags($delete_tags, 0) if($delete_tags);
+ $file->delete_tags($delete_tagvals, 1) if($delete_tagvals);
my $donesomething=($delete_artist || $delete_album || $delete_track ||
$delete_tracknum || $delete_year || $delete_v1genre ||
$delete_comment || $delete_genre || $delete_tags ||
- (@replace_tags && $replace_tags[0]));
+ $delete_tagvals);
return($donesomething ? 1 : 0);
}
$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]);
- }
my $donesomething=(defined($artist) || defined($album) ||
defined($track) || defined($tracknum) ||
defined($year) || defined($v1genre) ||
defined($comment) || defined($genre) ||
- defined($add_tags) ||
- (@replace_tags && defined($replace_tags[1])));
+ defined($add_tags));
return( $donesomething ? 1 : 0 );
}
sub delete_tags
{
- my($self, @tags)=@_;
+ my($self, $tags, $delvals)=@_;
my $current=$self->tags();
my @current=split(/\s*,\s*/, $current);
+ my @tags=split(/\s*,\s*/, $tags);
my %hash=();
@hash{@current}=();
for my $tag (@tags)
{
delete($hash{$tag}) if(exists($hash{$tag}));
+ if($delvals)
+ {
+ my $base=($tag =~ /(.*?)\//)[0];
+ $base=$tag unless($base);
+ for my $curtag (keys %hash)
+ {
+ delete($hash{$curtag}) if($curtag =~ /^$base\//);
+ }
+ }
}
my @tagsout=sort keys(%hash);
my $genre=join(', ', @tagsout);