From: Ian Beckwith Date: Sun, 26 Sep 2010 06:42:58 +0000 (+0100) Subject: finish refactoring AudioFile X-Git-Tag: debian/1.0-1~165 X-Git-Url: http://erislabs.net/gitweb/?a=commitdiff_plain;h=deaedd5e5b0e61dfc9f2b8a390680f0a6f9c1cd3;hp=5ba51e7f6ceaab64abedce8f7c954aaa529d274d;p=id3fs.git finish refactoring AudioFile --- diff --git a/lib/ID3FS/AudioFile.pm b/lib/ID3FS/AudioFile.pm index 398a169..99d4753 100644 --- a/lib/ID3FS/AudioFile.pm +++ b/lib/ID3FS/AudioFile.pm @@ -34,35 +34,98 @@ sub new print("Unknown extension: $ext\n"); return undef; } + return $self; } sub artist { - return shift->{audiofile}->artist(@_); + my $self=shift; + return $self->sanitise($self->stripslashes($self->{audiofile}->artist())); } + sub album { - return shift->{audiofile}->album(@_); + my $self=shift; + return $self->sanitise($self->stripslashes($self->{audiofile}->album())); } + sub audiotype { - return shift->{audiofile}->audiotype(@_); + my $self=shift; + return $self->sanitise($self->stripslashes($self->{audiofile}->audiotype())); } + sub haspic { - return shift->{audiofile}->haspic(@_); + return undef; # FIXME +# my $self=shift; +# return $self->{audiofile}->haspic(); } + sub v1genre { - return shift->{audiofile}->v1genre(@_); + my $self=shift; + return $self->sanitise($self->stripslashes($self->{audiofile}->v1genre())); } + sub year { - return shift->{audiofile}->year(@_); + my $self=shift; + my $year=($self->sanitise( + $self->stripslashes( + $self->{audiofile}->year()))); + if($year =~/(\d{4})/) + { + $year=$1; + } + return $year; } + sub tags { - return shift->{audiofile}->tags(@_); + my $self=shift; + my @tags=$self->{audiofile}->tags(); + return({}) unless(@tags); + my $tags={}; + if(@tags) + { + @tags = grep { defined($_); } @tags; + # combine then split on commas + # so multiple comma-delimited tags will work + @tags=split(/\s*,\s*/, join(', ', @tags)); + for my $tag (@tags) + { + next unless(length($tag)); + next unless($tag =~ /\S+/); + $tag=$self->sanitise($tag); + + if($tag=~/([^\/]+)\/(.*)/) + { + my $tagname = $1; + my $tagval = $self->stripslashes($2); + $tags->{$tagname}=$tagval; + } + else + { + $tags->{$tag}=undef; + } + } + } + return $tags; +} + +sub sanitise +{ + my ($self, $text)=@_; + $text =~ s/[^[:print:]]//g if(defined($text)); + return $text; +} + +sub stripslashes +{ + my ($self, $text)=@_; + $text =~ s/\//-/g if(defined($text)); + return $text; } 1; diff --git a/lib/ID3FS/AudioFile/Flac.pm b/lib/ID3FS/AudioFile/Flac.pm index 308b8a0..1eebb2c 100644 --- a/lib/ID3FS/AudioFile/Flac.pm +++ b/lib/ID3FS/AudioFile/Flac.pm @@ -27,9 +27,7 @@ sub get length($self->{tags}->{$key}) && $self->{tags}->{$key} =~ /\S+/) { - my $val=$self->{tags}->{$key}; - $val =~ s/\//-/g; # drop slashes - return $val; + return $self->{tags}->{$key}; } } warn("$self->{path}: no $tag defined in FLAC comments\n") if($complain); @@ -41,19 +39,8 @@ sub album { shift->get("ALBUM", 1); } sub audiotype { return "flac"; } sub haspic { return undef; } # FIXME sub v1genre { return undef; } # ID3 only - # We don't care if year is not set -sub year -{ - my ($self)=@_; - my $date=shift->get("DATE", 0); - return undef unless($date); - if($date =~/(\d\d\d\d)/) - { - $date=$1; - } - return $date; -} +sub year { shift->get("DATE", 0); } sub tags { @@ -70,24 +57,7 @@ sub tags push(@tags, $self->{tags}->{$key}); } } - # combine then split on commas - # so multiple comma-delimited tags will work - @tags=split(/\s*,\s*/, join(', ', @tags)); - for my $tag (@tags) - { - if($tag=~/([^\/]+)\/(.*)/) - { - my $tagname=$1; - my $tagval=$2; - $tagval=~s/\//-/g; - $tags->{$tagname}=$tagval; - } - else - { - $tags->{$tag}=undef; - } - } - return $tags; + return(@tags); } 1; diff --git a/lib/ID3FS/AudioFile/Mp3.pm b/lib/ID3FS/AudioFile/Mp3.pm index d6597d0..8ac84c4 100644 --- a/lib/ID3FS/AudioFile/Mp3.pm +++ b/lib/ID3FS/AudioFile/Mp3.pm @@ -41,7 +41,6 @@ sub choose warn("$self->{path}: no $func defined in ID3 tags\n") if($verbose); return undef; } - $thing=~s/\//-/g; # drop slashes return $thing; } @@ -55,36 +54,15 @@ sub v1genre { my($self)=@_; my $genre=undef; - if(defined($self->{v1})) - { - $genre=$self->{v1}->genre(); - $genre =~ s/\//-/g if(defined($genre)); - } + $genre=$self->{v1}->genre() if(defined($self->{v1})); return $genre; } sub tags { my $self=shift; - return({}) unless(exists($self->{mp3}->{ID3v2}) && defined($self->{mp3}->{ID3v2})); - my $genre=$self->{mp3}->{ID3v2}->genre(); - return({}) unless(defined($genre) && length($genre)); - my @tags=split(/\s*,\s*/, $genre); - for my $tag (@tags) - { - if($tag=~/([^\/]+)\/(.*)/) - { - my $tagname=$1; - my $tagval=$2; - $tagval=~s/\//-/g; - $self->{tags}->{$tagname}=$tagval; - } - else - { - $self->{tags}->{$tag}=undef; - } - } - return $self->{tags}; + return() unless(exists($self->{mp3}->{ID3v2}) && defined($self->{mp3}->{ID3v2})); + return($self->{mp3}->{ID3v2}->genre()); } sub get_tags @@ -108,4 +86,3 @@ sub get_tags } 1; - diff --git a/lib/ID3FS/AudioFile/Ogg.pm b/lib/ID3FS/AudioFile/Ogg.pm index 3df6950..a617f9f 100644 --- a/lib/ID3FS/AudioFile/Ogg.pm +++ b/lib/ID3FS/AudioFile/Ogg.pm @@ -50,19 +50,8 @@ sub album { shift->get("Album", 1); } sub audiotype { return "ogg"; } sub haspic { return undef; } # FIXME sub v1genre { return undef; } # ID3 only - # We don't care if year is not set -sub year -{ - my ($self)=@_; - my $date=shift->get("Date", 0); - return undef unless($date); - if($date =~/(\d\d\d\d)/) - { - $date=$1; - } - return $date; -} +sub year { shift->get("Date", 0); } sub tags { @@ -75,32 +64,7 @@ sub tags push(@comments,$self->{ogg}->comment($commenttype)); } } - my $tags={}; - if(@comments) - { - # filter for useful comments - @comments= grep { defined($_); } @comments; - @comments= grep { length($_); } @comments; - @comments= grep { /\S+/; } @comments; - # combine then split on commas - # so multiple comma-delimited tags will work - @comments=split(/\s*,\s*/, join(', ', @comments)); - for my $comment (@comments) - { - if($comment=~/([^\/]+)\/(.*)/) - { - my $tagname=$1; - my $tagval=$2; - $tagval=~s/\//-/g; - $tags->{$tagname}=$tagval; - } - else - { - $tags->{$comment}=undef; - } - } - } - return $tags; + return(@comments); } 1;