use strict;
use warnings;
+use Ogg::Vorbis::Header;
sub new
{
my $class=ref($proto) || $proto;
my $self={};
bless($self,$class);
- # FIXME
- print "OGG UNIMPLEMENTED\n";
+
$self->{path}=shift;
+ $self->{ogg}=Ogg::Vorbis::Header->new($self->{path});
+ use Data::Dumper;
+ # load tags
+ print Dumper $self->{ogg}->comment_tags;
return $self;
}
+sub get
+{
+ my ($self, $tag, $verbose)=@_;
+ my @comments=$self->{ogg}->comment($tag);
+ if(@comments)
+ {
+ # 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);
+ return undef;
+}
+
+sub artist { shift->get("Artist", 1); }
+sub album { shift->get("Album", 1); }
+sub audiotype { return "ogg"; }
+sub haspic { return undef; } # FIXME
+sub v1genre { return undef; } # ID3 only
+
+# We don't care if year is not set
+sub year
+{
+ my ($self)=@_;
+ my $date=shift->get("Date", 0);
+ return undef unless($date);
+ if($date =~/(\d\d\d\d)/)
+ {
+ $date=$1;
+ }
+ return $date;
+}
+
+sub tags
+{
+ my $self=shift;
+ my @comments=$self->{ogg}->comment("Genre");
+ my $tags={};
+ if(@comments)
+ {
+ # filter for useful comments
+ @comments= grep { defined($_); } @comments;
+ @comments= grep { length($_); } @comments;
+ @comments= grep { /\S+/; } @comments;
+ for my $comment (@comments)
+ {
+ if($comment=~/([^\/]+)\/(.*)/)
+ {
+ my $tagname=$1;
+ my $tagval=$2;
+ $tagval=~s/\//-/g;
+ $tags->{$tagname}=$tagval;
+ }
+ else
+ {
+ $tags->{$comment}=undef;
+ }
+ }
+ }
+ return $tags;
+}
+
1;
+