From f81050374f8c7aa1fa368de2dbdea2db3631188b Mon Sep 17 00:00:00 2001 From: Ian Beckwith Date: Sat, 30 Oct 2010 02:44:19 +0100 Subject: [PATCH] AudioFile: more write support --- bin/id3fs-tag | 2 +- lib/ID3FS/AudioFile.pm | 6 ++++- lib/ID3FS/AudioFile/Mp3.pm | 63 +++++++++++++++++++++++++++++++++------------- 3 files changed, 51 insertions(+), 20 deletions(-) diff --git a/bin/id3fs-tag b/bin/id3fs-tag index 0911f45..df40918 100755 --- a/bin/id3fs-tag +++ b/bin/id3fs-tag @@ -127,7 +127,7 @@ sub do_adds sub do_write { my($file)=@_; - $file->write(); + $file->write(); } sub do_display diff --git a/lib/ID3FS/AudioFile.pm b/lib/ID3FS/AudioFile.pm index 5c45984..6fe5fa6 100644 --- a/lib/ID3FS/AudioFile.pm +++ b/lib/ID3FS/AudioFile.pm @@ -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)=@_; diff --git a/lib/ID3FS/AudioFile/Mp3.pm b/lib/ID3FS/AudioFile/Mp3.pm index 8133c91..295693b 100644 --- a/lib/ID3FS/AudioFile/Mp3.pm +++ b/lib/ID3FS/AudioFile/Mp3.pm @@ -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; -- 2.11.0