id3fs-tag: set genre
authorIan Beckwith <ianb@erislabs.net>
Mon, 1 Nov 2010 21:47:08 +0000 (21:47 +0000)
committerIan Beckwith <ianb@erislabs.net>
Mon, 1 Nov 2010 21:47:08 +0000 (21:47 +0000)
bin/id3fs-tag
lib/ID3FS/AudioFile.pm
lib/ID3FS/AudioFile/Mp3.pm

index 42650c3..c79a5b3 100755 (executable)
@@ -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";
     }
 }
 
index e020b43..01722ce 100644 (file)
@@ -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"));       }
index bcbd227..2b90b5d 100644 (file)
@@ -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)=@_;