+# 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;
my $path=shift;
my $ext=($path=~/.*\.(.*)/)[0];
return undef unless($ext);
+ my $me=shift;
$ext=lc($ext);
if($ext eq "mp3")
{
}
else
{
- print("Unknown extension: $ext\n");
+ print("$me: $path: Unknown extension: $ext\n");
return undef;
}
return $self;
sub year
{
my $self=shift;
- my $year=($self->sanitise(
- $self->stripslashes(
- $self->{audiofile}->year())));
- if($year =~/(\d{4})/)
+ my $year=$self->sanitise($self->stripslashes($self->{audiofile}->year()));
+ if(defined($year) && $year =~/(\d{4})/)
{
$year=$1;
}
sub tags
{
my $self=shift;
- my @tags=$self->{audiofile}->tags();
- return({}) unless(@tags);
- my $tags={};
- if(@tags)
+ 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)
{
- @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);
+ my ($tagname, $tagval)=($tag, undef);
+ if($tag=~/^([^\/]+)\/(.*)/)
{
- 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;
- }
+ ($tagname, $tagval)=($1, $2);
}
+ push(@outtags, [ $tagname, $tagval ]);
}
- return $tags;
+ return @outtags;
}
sub sanitise