AudioFile: more write support
authorIan Beckwith <ianb@erislabs.net>
Sat, 30 Oct 2010 01:44:19 +0000 (02:44 +0100)
committerIan Beckwith <ianb@erislabs.net>
Sat, 30 Oct 2010 01:44:19 +0000 (02:44 +0100)
bin/id3fs-tag
lib/ID3FS/AudioFile.pm
lib/ID3FS/AudioFile/Mp3.pm

index 0911f45..df40918 100755 (executable)
@@ -127,7 +127,7 @@ sub do_adds
 sub do_write
 {
     my($file)=@_;
-    $file->write(); 
+    $file->write();
 }
 
 sub do_display
index 5c45984..6fe5fa6 100644 (file)
@@ -118,7 +118,6 @@ sub format_year
     return $year;
 }
 
-
 sub add_tags
 {
     my($self, $tags)=@_;
@@ -150,6 +149,11 @@ sub tags
     return @outtags;
 }
 
+sub write
+{
+    shift->{audiofile}->write();
+}
+
 sub sanitise
 {
     my ($self, $text)=@_;
index 8133c91..295693b 100644 (file)
@@ -30,43 +30,64 @@ sub new
     $self->{path}=shift;
     $self->{mp3}=MP3::Tag->new($self->{path});
     $self->get_tags();
-    $self->{v1}=undef;
-    $self->{v1}=$self->{mp3}->{ID3v1} if(exists($self->{mp3}->{ID3v1}));
-    $self->{v2}=undef;
-    $self->{v2}=$self->{mp3}->{ID3v2} if(exists($self->{mp3}->{ID3v2}));
-
     $self->{tags}={};
 
     return $self;
 }
 
+sub set
+{
+    my ($self, $func, $value)=@_;
+    return $self->choose($func) unless($value);
+    unless(exists($self->{mp3}->{ID3v1}))
+    {
+       $self->{mp3}->new_tag("ID3v1");
+    }
+    unless(exists($self->{mp3}->{ID3v2}))
+    {
+       $self->{mp3}->new_tag("ID3v2");
+    }
+    my $method=$func . "_set";
+    $self->{mp3}->$method($value, 1);
+    return $value;
+}
+
 sub choose
 {
-    my ($self, $func)=@_;
+    my($self, $func)=@_;
     my $thing=undef;
-    if(defined($self->{v2}))
+    if(exists($self->{mp3}->{ID3v2}))
     {
-       $thing=$self->{v2}->$func();
+       $thing=$self->{mp3}->{ID3v2}->$func();
     }
-    if(defined($self->{v1}) && (!defined($thing) || !length($thing)))
+    if(exists($self->{mp3}->{ID3v1}) && (!defined($thing) || !length($thing)))
     {
-       $thing=$self->{v1}->$func();
+       $thing=$self->{mp3}->{ID3v1}->$func();
     }
     return $thing;
 }
 
-sub artist    { shift->choose("artist"); }
-sub album     { shift->choose("album");  }
-# We don't care if year is not set
-sub year      { shift->choose("year");   }
-sub audiotype { return "mp3";            }
-sub haspic    { return undef;            } # NEXTVERSION
+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("tracknum", @_)); }
+sub comment   { return(shift->set("comment",  @_)); }
+
+sub audiotype { return "mp3";         }
+sub haspic    { return undef;         } # NEXTVERSION
 
 sub v1genre
 {
-    my($self)=@_;
+    my($self, $val)=@_;
+    if($val)
+    {
+       $self->{mp3}->new_tag("ID3v1") unless(defined($self->{mp3}->{ID3v1}));
+       $self->{mp3}->{ID3v1}->genre($val);
+       return $val;
+    }
     my $genre=undef;
-    $genre=$self->{v1}->genre() if(defined($self->{v1}));
+    $genre=$self->{ID3v1}->genre() if(defined($self->{ID3v1}));
     return $genre;
 }
 
@@ -97,4 +118,10 @@ sub get_tags
     }
 }
 
+sub write
+{
+    my $self=shift;
+    $self->{mp3}->update_tags();
+}
+
 1;