+ return $self;
+}
+
+sub artist
+{
+ my $self=shift;
+ return $self->sanitise($self->stripslashes($self->{audiofile}->artist()));
+}
+
+sub album
+{
+ my $self=shift;
+ return $self->sanitise($self->stripslashes($self->{audiofile}->album()));
+}
+
+sub audiotype
+{
+ my $self=shift;
+ return $self->sanitise($self->stripslashes($self->{audiofile}->audiotype()));
+}
+
+sub haspic
+{
+ return undef; # FIXME
+# my $self=shift;
+# return $self->{audiofile}->haspic();
+}
+
+sub v1genre
+{
+ my $self=shift;
+ return $self->sanitise($self->stripslashes($self->{audiofile}->v1genre()));
+}
+
+sub year
+{
+ my $self=shift;
+ my $year=$self->sanitise($self->stripslashes($self->{audiofile}->year()));
+ if(defined($year) && $year =~/(\d{4})/)
+ {
+ $year=$1;
+ }
+ return $year;
+}
+
+sub tags
+{
+ my $self=shift;
+ my @intags=$self->{audiofile}->tags();
+ my @outtags=();
+ return() unless(@intags);
+ @intags = grep { defined($_); } @intags;
+ # combine then split on commas
+ # so multiple comma-delimited tags will work
+ @intags=split(/\s*,\s*/, join(', ', @intags));
+ for my $tag (@intags)
+ {
+ next unless(length($tag));
+ next unless($tag =~ /\S+/);
+ $tag=$self->sanitise($tag);
+ my ($tagname, $tagval)=($tag, undef);
+ if($tag=~/^([^\/]+)\/(.*)/)
+ {
+ ($tagname, $tagval)=($1, $2);
+ }
+ push(@outtags, [ $tagname, $tagval ]);
+ }
+ return @outtags;
+}
+
+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;