X-Git-Url: http://git.ieval.ro/?p=app-musicexpo.git;a=blobdiff_plain;f=lib%2FApp%2FMusicExpo.pm;h=68ef5da343684d16c663baedd20dac699de8b7f1;hp=3c0f4b7ae88f0fb79946ee5b3698408936ff4f6f;hb=513a3718ede09c9b237b428b5e1e7784ff002351;hpb=0faf07b9bdfb216b3b77b06361a43663c2a3acac diff --git a/lib/App/MusicExpo.pm b/lib/App/MusicExpo.pm index 3c0f4b7..68ef5da 100644 --- a/lib/App/MusicExpo.pm +++ b/lib/App/MusicExpo.pm @@ -7,6 +7,7 @@ use Audio::FLAC::Header qw//; use HTML::Template::Compiled qw//; use Memoize qw/memoize/; use MP3::Tag qw//; +use Ogg::Vorbis::Header::PurePerl; use DB_File qw//; use File::Basename qw/fileparse/; @@ -70,6 +71,23 @@ sub mp3info{ } } +sub vorbisinfo{ + my $file=$_[0]; + my $ogg=Ogg::Vorbis::Header::PurePerl->new($file); + + freeze +{ + format => 'Vorbis', + title => fix($ogg->comment('TITLE') || '?'), + artist => fix ($ogg->comment('artist') || '?'), + year => fix ($ogg->comment('DATE') || '?'), + album => fix ($ogg->comment('ALBUM') || '?'), + tracknumber => fix ($ogg->comment('TRACKNUMBER') || '?'), + tracktotal => fix ($ogg->comment('TRACKTOTAL') || '?'), + genre => fix ($ogg->comment('GENRE')) || '?', + path => $file, + } +} + sub normalizer{ "$_[0]|".(stat $_[0])[9] } @@ -78,11 +96,13 @@ sub run { tie my %cache, 'DB_File', $cache, O_RDWR|O_CREAT, 0644 unless $cache eq ''; memoize 'flacinfo', NORMALIZER => \&normalizer, LIST_CACHE => 'MERGE', SCALAR_CACHE => [HASH => \%cache] unless $cache eq ''; memoize 'mp3info' , NORMALIZER => \&normalizer, LIST_CACHE => 'MERGE', SCALAR_CACHE => [HASH => \%cache] unless $cache eq ''; + memoize 'vorbisinfo' , NORMALIZER => \&normalizer, LIST_CACHE => 'MERGE', SCALAR_CACHE => [HASH => \%cache] unless $cache eq ''; my @files; for my $file (@ARGV) { push @files, thaw flacinfo $file if $file =~ /.flac$/i; push @files, thaw mp3info $file if $file =~ /.mp3$/i; + push @files, thaw vorbisinfo $file if $file =~ /.og(?:g|a)$/i; } my $ht=HTML::Template::Compiled->new(