finish refactoring AudioFile
[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, $complain)=@_;
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     warn("$self->{path}: no $tag defined in FLAC comments\n") if($complain);
34     return undef;
35 }
36
37 sub artist    { shift->get("ARTIST", 1); }
38 sub album     { shift->get("ALBUM", 1);  }
39 sub audiotype { return "flac";           }
40 sub haspic    { return undef;            } # FIXME
41 sub v1genre   { return undef;            } # ID3 only
42 # We don't care if year is not set
43 sub year      { shift->get("DATE", 0);   }
44
45 sub tags
46 {
47     my $self=shift;
48     my @tags=();
49     my $tags={};
50     for my $key (keys %{$self->{tags}})
51     {
52         if($key =~ /genre/i &&
53            defined($self->{tags}->{$key})  &&
54            length($self->{tags}->{$key})   &&
55            $self->{tags}->{$key} =~ /\S+/)
56         {
57             push(@tags, $self->{tags}->{$key});
58         }
59     }
60     return(@tags);
61 }
62
63 1;
64