finish refactoring AudioFile
authorIan Beckwith <ianb@erislabs.net>
Sun, 26 Sep 2010 06:42:58 +0000 (07:42 +0100)
committerIan Beckwith <ianb@erislabs.net>
Sun, 26 Sep 2010 06:42:58 +0000 (07:42 +0100)
lib/ID3FS/AudioFile.pm
lib/ID3FS/AudioFile/Flac.pm
lib/ID3FS/AudioFile/Mp3.pm
lib/ID3FS/AudioFile/Ogg.pm

index 398a169..99d4753 100644 (file)
@@ -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;
index 308b8a0..1eebb2c 100644 (file)
@@ -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;
index d6597d0..8ac84c4 100644 (file)
@@ -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;
-
index 3df6950..a617f9f 100644 (file)
@@ -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;