Changeset 29 in mp3-find for trunk/lib/MP3/Find/Util.pm


Ignore:
Timestamp:
05/21/06 05:17:23 (18 years ago)
Author:
peter
Message:
  • factored out 'get_mp3_metadata' function from Filesystem.pm to Util.pm
  • added 'update' function to DB.pm that combines 'update_db' and 'update_file' (for updating just specific files); idea courtesy of Matt Dietrich
  • modified mp3db to let you mix and match files and directories on the command line; now also uses the 'update' function in DB.pm
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/MP3/Find/Util.pm

    r1 r29  
    77use vars qw(@EXPORT_OK); 
    88 
    9 @EXPORT_OK = qw(build_query); 
     9@EXPORT_OK = qw(build_query get_mp3_metadata); 
     10 
     11use Carp; 
     12use MP3::Info; 
     13 
     14eval { require MP3::Tag }; 
     15my $CAN_USE_ID3V2 = $@ ? 0 : 1; 
    1016 
    1117sub build_query { 
     
    3844} 
    3945 
     46sub get_mp3_metadata { 
     47    my $args = shift; 
     48 
     49    my $filename = $args->{filename} or croak "get_mp3_metadata needs a 'filename' argument"; 
     50     
     51    my $mp3 = { 
     52        FILENAME => $filename, 
     53        %{ get_mp3tag($filename)  || {} }, 
     54        %{ get_mp3info($filename) || {} }, 
     55    }; 
     56     
     57    if ($CAN_USE_ID3V2 and $args->{use_id3v2}) { 
     58        # add ID3v2 tag info, if present 
     59        my $mp3_tags = MP3::Tag->new($filename); 
     60        unless (defined $mp3_tags) { 
     61            warn "Can't get MP3::Tag object for $filename\n"; 
     62        } else { 
     63            $mp3_tags->get_tags; 
     64            if (my $id3v2 = $mp3_tags->{ID3v2}) { 
     65                for my $frame_id (keys %{ $id3v2->get_frame_ids }) { 
     66                    my ($info) = $id3v2->get_frame($frame_id); 
     67                    if (ref $info eq 'HASH') { 
     68                        # use the "Text" value as the value for this frame, if present 
     69                        $mp3->{$frame_id} = $info->{Text} if exists $info->{Text}; 
     70                    } else { 
     71                        $mp3->{$frame_id} = $info; 
     72                    } 
     73                } 
     74            } 
     75        } 
     76    } 
     77 
     78    return $mp3; 
     79} 
     80 
    4081# module return 
    41821; 
Note: See TracChangeset for help on using the changeset viewer.