sql formatting tweaks
[id3fs.git] / lib / ID3FS / AudioFile.pm
index 398a169..bb91604 100644 (file)
@@ -1,3 +1,19 @@
+# id3fs - a FUSE-based filesystem for browsing audio metadata
+# Copyright (C) 2010  Ian Beckwith <ianb@erislabs.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
 package ID3FS::AudioFile;
 
 use strict;
@@ -16,6 +32,7 @@ sub new
     my $path=shift;
     my $ext=($path=~/.*\.(.*)/)[0];
     return undef unless($ext);
+    my $me=shift;
     $ext=lc($ext);
     if($ext eq "mp3")
     {
@@ -31,38 +48,91 @@ sub new
     }
     else
     {
-       print("Unknown extension: $ext\n");
+       print("$me: $path: 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; # NEXTVERSION
+#    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(defined($year) && $year =~/(\d{4})/)
+    {
+       $year=$1;
+    }
+    return $year;
 }
+
 sub tags
 {
-    return shift->{audiofile}->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;
 }
 
 1;