finish refactoring AudioFile
[id3fs.git] / lib / ID3FS / AudioFile.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;