From 08717313d5feba3f77f848b6409ec46263ed548e Mon Sep 17 00:00:00 2001 From: Ian Beckwith Date: Mon, 1 Nov 2010 21:47:08 +0000 Subject: [PATCH] id3fs-tag: set genre --- bin/id3fs-tag | 26 +++++++++++++------------- lib/ID3FS/AudioFile.pm | 1 + lib/ID3FS/AudioFile/Mp3.pm | 35 +++++++++++++++++++++++++++-------- 3 files changed, 41 insertions(+), 21 deletions(-) diff --git a/bin/id3fs-tag b/bin/id3fs-tag index 42650c3..c79a5b3 100755 --- a/bin/id3fs-tag +++ b/bin/id3fs-tag @@ -151,18 +151,16 @@ sub do_display my $v1genre=$file->v1genre(); my @tags=$file->tags(); @tags = map { (ref($_) eq "ARRAY") ? join('/', grep {defined;} @{$_}) : $_; } @tags; - use Data::Dumper; - print Dumper \@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); + 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 { @@ -170,10 +168,12 @@ sub do_display $year, $v1genre, $comment); @fields=map { defined($_) ? $_ : ""; } @fields; print join(':', @fields), "\n"; - if(@tags) - { - print "tags:", join(", ", @tags), "\n"; - } + } + if(@tags) + { + if($verbose) { print " tags: "; } + else { print $file->path() . ":tags:"; } + print join(", ", @tags), "\n"; } } diff --git a/lib/ID3FS/AudioFile.pm b/lib/ID3FS/AudioFile.pm index e020b43..01722ce 100644 --- a/lib/ID3FS/AudioFile.pm +++ b/lib/ID3FS/AudioFile.pm @@ -74,6 +74,7 @@ sub album { return(shift->set("album", @_)); } sub track { return(shift->set("track", @_)); } sub tracknum { return(shift->set("tracknum", @_)); } sub v1genre { return(shift->set("v1genre", @_)); } +sub genre { return(shift->set("genre", @_)); } sub comment { return(shift->set("comment", @_)); } sub audiotype { return(shift->set("audiotype")); } sub haspic { return(shift->set("haspic")); } diff --git a/lib/ID3FS/AudioFile/Mp3.pm b/lib/ID3FS/AudioFile/Mp3.pm index bcbd227..2b90b5d 100644 --- a/lib/ID3FS/AudioFile/Mp3.pm +++ b/lib/ID3FS/AudioFile/Mp3.pm @@ -69,16 +69,36 @@ sub choose return $thing; } -sub year { return(shift->set("year", @_)); } -sub artist { return(shift->set("artist", @_)); } -sub album { return(shift->set("album", @_)); } -sub track { return(shift->set("title", @_)); } -sub tracknum { return(shift->set("track", @_)); } -sub comment { return(shift->set("comment", @_)); } +sub year { return(shift->set("year", @_)); } +sub artist { return(shift->set("artist", @_)); } +sub album { return(shift->set("album", @_)); } +sub track { return(shift->set("title", @_)); } +sub tracknum { return(shift->set("track", @_)); } +sub comment { return(shift->set("comment", @_)); } sub audiotype { return "mp3"; } sub haspic { return undef; } # NEXTVERSION +# we only set v2 genre +sub genre +{ + my ($self, $value)=@_; + if($value) + { + if(exists($self->{mp3tag}->{ID3v2})) + { + $self->{mp3tag}->{ID3v2}->remove_frame("TCON"); + } + else + { + $self->{mp3tag}->new_tag("ID3v2"); + } + $self->{mp3tag}->{ID3v2}->add_frame("TCON", $value); + + } + return($self->{mp3tag}->{ID3v2}->genre()); +} + sub v1genre { my($self, $val)=@_; @@ -156,7 +176,7 @@ sub write } else { - $self->{mp3tag}->{ID3v1}->remove_tag; + $self->{mp3tag}->{ID3v1}->write_tag; } } if(exists($self->{mp3tag}->{ID3v2})) @@ -279,7 +299,6 @@ sub uniq return(sort keys(%hash)); } - sub channels { my($self)=@_; -- 2.11.0