c2b02fcf475122d08e0d1bc2d3eabf1e7046a948
[id3fs.git] / lib / ID3FS / AudioFile / Flac.pm
1 package ID3FS::AudioFile::Flac;
2
3 use strict;
4 use warnings;
5 use Audio::FLAC::Header;
6
7 sub new
8 {
9     my $proto=shift;
10     my $class=ref($proto) || $proto;
11     my $self={};
12     bless($self,$class);
13
14     $self->{path}=shift;
15     my $flac=Audio::FLAC::Header->new($self->{path});
16     $self->{tags}=$flac->tags();
17     return $self;
18 }
19
20 sub get
21 {
22     my ($self, $tag)=@_;
23     for my $key (keys %{$self->{tags}})
24     {
25         if($key =~ /$tag/i &&
26            defined($self->{tags}->{$key})  &&
27            length($self->{tags}->{$key})   &&
28            $self->{tags}->{$key} =~ /\S+/)
29         {
30             return $self->{tags}->{$key};
31         }
32     }
33     return undef;
34 }
35
36 sub artist    { shift->get("ARTIST"); }
37 sub album     { shift->get("ALBUM");  }
38 sub audiotype { return "flac";        }
39 sub haspic    { return undef;         } # FIXME
40 sub v1genre   { return undef;         } # ID3 only
41 sub year      { shift->get("DATE");   }
42
43 sub tags
44 {
45     my $self=shift;
46     my @tags=();
47     my $tags={};
48     for my $key (keys %{$self->{tags}})
49     {
50         if($key =~ /genre/i &&
51            defined($self->{tags}->{$key})  &&
52            length($self->{tags}->{$key})   &&
53            $self->{tags}->{$key} =~ /\S+/)
54         {
55             push(@tags, $self->{tags}->{$key});
56         }
57     }
58     return(@tags);
59 }
60
61 1;
62