flac/ogg: allow any case for comment names, files in the wild seem to have Genre...
[id3fs.git] / lib / ID3FS / File / Flac.pm
index 0f9999f..ebe4ea8 100644 (file)
@@ -19,21 +19,21 @@ sub new
 
 sub get
 {
-    my ($self, $tag, $verbose)=@_;
-    if(exists($self->{tags}->{$tag})   &&
-       defined($self->{tags}->{$tag})  &&
-       length($self->{tags}->{$tag})   &&
-       $self->{tags}->{$tag} =~ /\S+/)
+    my ($self, $tag, $complain)=@_;
+    for my $key (keys %{$self->{tags}})
     {
-       my $val=$self->{tags}->{$tag};
-       $val =~ s/\//-/g; # drop slashes
-       return $val;
-    }
-    else
-    {
-       warn("$self->{path}: no $tag defined in FLAC comments\n") if($verbose);
-       return undef;
+       if($key =~ /$tag/i &&
+          defined($self->{tags}->{$key})  &&
+          length($self->{tags}->{$key})   &&
+          $self->{tags}->{$key} =~ /\S+/)
+       {
+           my $val=$self->{tags}->{$key};
+           $val =~ s/\//-/g; # drop slashes
+           return $val;
+       }
     }
+    warn("$self->{path}: no $tag defined in FLAC comments\n") if($complain);
+    return undef;
 }
 
 sub artist    { shift->get("ARTIST", 1); }
@@ -58,9 +58,21 @@ sub year
 sub tags
 {
     my $self=shift;
-    my $genre=$self->get("GENRE");
-    return({}) unless($genre);
-    my @tags=split(/\s*,\s*/, $genre);
+    my @tags=();
+    my $tags={};
+    for my $key (keys %{$self->{tags}})
+    {
+       if($key =~ /genre/i &&
+          defined($self->{tags}->{$key})  &&
+          length($self->{tags}->{$key})   &&
+          $self->{tags}->{$key} =~ /\S+/)
+       {
+           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=~/([^\/]+)\/(.*)/)