$self->{path}=shift;
$self->{ogg}=Ogg::Vorbis::Header->new($self->{path});
+ $self->{comments}=[ $self->{ogg}->comment_tags() ];
return $self;
}
sub get
{
- my ($self, $tag, $verbose)=@_;
- my @comments=$self->{ogg}->comment($tag);
- if(@comments)
+ my ($self, $tag, $complain)=@_;
+ for my $commenttype (@{$self->{comments}})
{
- # take first comment with actual contents
- while(my $comment=shift @comments)
+ if($commenttype =~ /$tag/i)
{
- if(defined($comment) &&
- length($comment) &&
- $comment =~ /\S+/)
+ my @comments=$self->{ogg}->comment($commenttype);
+ if(@comments)
{
- $comment =~ s/\//-/g; # drop slashes
- return $comment;
+ # take first comment with actual contents
+ while(my $comment=shift @comments)
+ {
+ if(defined($comment) &&
+ length($comment) &&
+ $comment =~ /\S+/)
+ {
+ $comment =~ s/\//-/g; # drop slashes
+ return $comment;
+ }
+ }
}
}
}
- warn("$self->{path}: no $tag defined in Ogg comments\n") if($verbose);
+ warn("$self->{path}: no $tag defined in Ogg comments\n") if($complain);
return undef;
}
sub tags
{
my $self=shift;
- my @comments=$self->{ogg}->comment("Genre");
+ my @comments;
+ for my $commenttype (@{$self->{comments}})
+ {
+ if($commenttype =~ /genre/i)
+ {
+ push(@comments,$self->{ogg}->comment($commenttype));
+ }
+ }
my $tags={};
if(@comments)
{
@comments= grep { defined($_); } @comments;
@comments= grep { length($_); } @comments;
@comments= grep { /\S+/; } @comments;
+ # combine then split on commas
+ # so multiple comma-delimited tags will work
+ @comments=split(/\s*,\s*/, join(', ', @comments));
for my $comment (@comments)
{
if($comment=~/([^\/]+)\/(.*)/)