File Coverage

blib/lib/AudioFile/Info/MP3/Tag.pm
Criterion Covered Total %
statement 39 44 88.6
branch 9 20 45.0
condition 1 3 33.3
subroutine 8 8 100.0
pod 1 1 100.0
total 58 76 76.3


line stmt bran cond sub pod time code
1             #
2             # $Id$
3             #
4              
5             =head1 NAME
6            
7             AudioFile::Info::MP3::Tag - Perl extension to get info from MP3 files.
8            
9             =head1 DESCRIPTION
10            
11             This is a plugin for AudioFile::Info which uses MP3::Tag to get or set
12             data about MP3 files.
13            
14             See L<AudioFile::Info> for more details.
15            
16             =cut
17              
18             package AudioFile::Info::MP3::Tag;
19              
20 3     3   234299 use 5.006;
  3         9  
  3         53  
21 3     3   10 use strict;
  3         3  
  3         53  
22 3     3   9 use warnings;
  3         3  
  3         68  
23 3     3   9 use Carp;
  3         3  
  3         121  
24              
25 3     3   1220 use MP3::Tag;
  3         100058  
  3         1160  
26              
27             our $VERSION = '1.06';
28              
29             my %data = (artist => ['artist', 'TPE1'],
30                         title => ['song', 'TIT2'],
31                         album => ['album', 'TALB'],
32                         track => ['track', 'TRCK'],
33                         year => ['year', 'TYER'],
34                         genre => ['genre', 'TCON']);
35              
36             sub new {
37 3     3 1 120   my $class = shift;
38 3         3   my $file = shift;
39 3         22   my $obj = MP3::Tag->new($file);
40 3         321   $obj->get_tags;
41              
42 3         2214   bless { obj => $obj }, $class;
43             }
44              
45             sub DESTROY {
46 3   33 3   769   my $file = $_[0]->{obj}{ID3v2}{mp3} || $_[0]->{obj}{ID3v2}{mp3};
47              
48 3 50       18   $file->close if defined $file;
49             }
50              
51             sub AUTOLOAD {
52 24     24   6504   our $AUTOLOAD;
53              
54 24         112   my ($pkg, $sub) = $AUTOLOAD =~ /(.+)::(\w+)/;
55              
56 24 50       52   die "Invalid attribute $sub" unless exists $data{$sub};
57              
58 24 100       39   if ($_[1]) {
59 6 50       13     $_[0]->{obj}->new_tag('ID3v1') unless $_[0]->{obj}{ID3v1};
60 6 50       8     $_[0]->{obj}->new_tag('ID3v2') unless $_[0]->{obj}{ID3v2};
61 6 50       11     if (my $frame = $_[0]->{obj}{ID3v1}) {
62 6         6       my $tag = $data{$sub}[0];
63 6         60       $frame->$tag($_[1]);
64 6         244       $frame->write_tag;
65                 }
66 6 50       737     if (my $frame = $_[0]->{obj}{ID3v2}) {
67 6         15       my $tag = $data{$sub}[1];
68 6 0       26       if (exists $frame->get_frame_ids->{$tag}) {
69 6         138         $frame->change_frame($tag, $_[1]);
70                   } else {
71 0         0         $frame->add_frame($tag, $_[1]);
72                   }
73 6         965       $frame->write_tag;
74                 }
75               }
76              
77 24 50       2867   if ($_[0]->{obj}{ID3v2}) {
78 24         129     return ($_[0]->{obj}{ID3v2}->get_frame($data{$sub}[1]))[0];
79               }
80 0 0           if ($_[0]->{obj}{ID3v1}) {
81 0               my $tag = $data{$sub}[0];
82 0               return $_[0]->{obj}{ID3v1}->$tag;
83               }
84 0             return;
85             }
86              
87              
88             1;
89             __END__
90            
91             =head1 METHODS
92            
93             =head2 new
94            
95             Creates a new object of class AudioFile::Info::MP3::Tag. Usually called
96             by AudioFile::Info::new.
97            
98             =head1 AUTHOR
99            
100             Dave Cross, E<lt>dave@mag-sol.comE<gt>
101            
102             =head1 COPYRIGHT AND LICENSE
103            
104             Copyright (c) 2003-2009 by Magnum Solutions Ltd. All rights reserved.
105            
106             This library is free software; you can redistribute it and/or modify
107             it under the same terms as Perl itself.
108            
109             =cut
110