X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FApp%2FMusicExpo.pm;h=cf16468be168d69498b4ead9bec69d2a2b308925;hb=a5dd5c0dee4a02197fe6e9bc36424d2befdfb816;hp=3fccfbb333b36f430eb9d94e6f0d6dfa127f3d57;hpb=a535e8790ef7f825c6049e16dff723d9e9b54634;p=app-musicexpo.git diff --git a/lib/App/MusicExpo.pm b/lib/App/MusicExpo.pm index 3fccfbb..cf16468 100644 --- a/lib/App/MusicExpo.pm +++ b/lib/App/MusicExpo.pm @@ -1,9 +1,9 @@ package App::MusicExpo; -use v5.14; +use 5.014000; use strict; use warnings; -our $VERSION = '0.005'; +our $VERSION = '0.006'; use Audio::FLAC::Header qw//; use HTML::Template::Compiled qw//; @@ -29,9 +29,9 @@ our $cache=''; our $template=''; GetOptions ( - "template:s" => \$template, - "prefix:s" => \$prefix, - "cache:s" => \$cache, + 'template:s' => \$template, + 'prefix:s' => \$prefix, + 'cache:s' => \$cache, ); sub flacinfo{ @@ -40,13 +40,13 @@ sub flacinfo{ freeze +{ format => 'FLAC', - title => $flac->tags('TITLE') // '?', - artist => $flac->tags('ARTIST') // '?', - year => $flac->tags('DATE') // '?', - album => $flac->tags('ALBUM') // '?', - tracknumber => $flac->tags('TRACKNUMBER') // '?', - tracktotal => $flac->tags('TRACKTOTAL') // '?', - genre => $flac->tags('GENRE') // '?', + title => $flac->tags('TITLE'), + artist => $flac->tags('ARTIST'), + year => $flac->tags('DATE'), + album => $flac->tags('ALBUM'), + tracknumber => $flac->tags('TRACKNUMBER'), + tracktotal => $flac->tags('TRACKTOTAL'), + genre => $flac->tags('GENRE'), file => scalar fileparse $file, } } @@ -54,17 +54,17 @@ sub flacinfo{ sub mp3info{ my $file=$_[0]; my %tag = map { encode 'UTF-8', $_ } %{get_mp3tag $file}; - my @trkn = split '/', $tag{TRACKNUM} // ''; + my @trkn = split m#/#s, $tag{TRACKNUM} // ''; freeze +{ format => 'MP3', - title => $tag{TITLE} || '?', - artist => $tag{ARTIST} || '?', - year => $tag{YEAR} || '?', - album => $tag{ALBUM} || '?', - tracknumber => $trkn[0] || '?', - tracktotal => $trkn[1] || '?', - genre => $tag{GENRE} || '?', + title => $tag{TITLE}, + artist => $tag{ARTIST}, + year => $tag{YEAR}, + album => $tag{ALBUM}, + tracknumber => $trkn[0], + tracktotal => $trkn[1], + genre => $tag{GENRE}, file => scalar fileparse $file, } } @@ -75,18 +75,18 @@ sub vorbisinfo{ freeze +{ format => 'Vorbis', - title => $ogg->comment('TITLE') || '?', - artist => $ogg->comment('artist') || '?', - year => $ogg->comment('DATE') || '?', - album => $ogg->comment('ALBUM') || '?', - tracknumber => $ogg->comment('TRACKNUMBER') || '?', - tracktotal => $ogg->comment('TRACKTOTAL') || '?', - genre => $ogg->comment('GENRE') || '?', + title => scalar $ogg->comment('TITLE'), + artist => scalar $ogg->comment('artist'), + year => scalar $ogg->comment('DATE'), + album => scalar $ogg->comment('ALBUM'), + tracknumber => scalar $ogg->comment('TRACKNUMBER'), + tracktotal => scalar $ogg->comment('TRACKTOTAL'), + genre => scalar $ogg->comment('GENRE'), file => scalar fileparse $file, } } -sub mp4_format ($){ +sub mp4_format ($){ ## no critic (ProhibitSubroutinePrototypes) my $encoding = $_[0]; return 'AAC' if $encoding eq 'mp4a'; return 'ALAC' if $encoding eq 'alac'; @@ -100,13 +100,13 @@ sub mp4info{ freeze +{ format => mp4_format $info{ENCODING}, - title => $tag{TITLE} || '?', - artist => $tag{ARTIST} || '?', - year => $tag{YEAR} || '?', - album => $tag{ALBUM} || '?', - tracknumber => $tag{TRACKNUM} || '?', - tracktotal => ($tag{TRKN} ? $tag{TRKN}->[1] : undef) || '?', - genre => $tag{GENRE} || '?', + title => $tag{TITLE}, + artist => $tag{ARTIST}, + year => $tag{YEAR}, + album => $tag{ALBUM}, + tracknumber => $tag{TRACKNUM}, + tracktotal => ($tag{TRKN} ? $tag{TRKN}->[1] : undef), + genre => $tag{GENRE}, file => scalar fileparse $file, }; } @@ -128,9 +128,8 @@ sub normalizer{ sub make_fragment{ join '-', map { lc =~ y/a-z0-9/_/csr } @_ } sub run { - my %info = %info; if ($cache) { - tie my %cache, 'DB_File', $cache, O_RDWR|O_CREAT, 0644; + tie my %cache, 'DB_File', $cache, O_RDWR|O_CREAT, 0644; ## no critic (ProhibitTie) $info{$_} = memoize $info{$_}, INSTALL => undef, NORMALIZER => \&normalizer, LIST_CACHE => 'FAULT', SCALAR_CACHE => [HASH => \%cache] for keys %info; } @@ -150,11 +149,11 @@ sub run { my @files; for (sort keys %files) { my @versions = @{$files{$_}}; - my %entry = (%{$versions[0]}, formats => []); + my %entry = (formats => [], map { $_ => '?' } qw/title artist year album tracknumber tracktotal genre/); for my $ver (@versions) { push @{$entry{formats}}, {format => $ver->{format}, file => $ver->{file}}; for my $key (keys %$ver) { - $entry{$key} = $ver->{$key} if $ver->{$key} ne '?'; + $entry{$key} = $ver->{$key} if $ver->{$key} && $ver->{$key} ne '?'; } } delete $entry{$_} for qw/format file/; @@ -164,7 +163,7 @@ sub run { @files = sort { $a->{title} cmp $b->{title} } @files; $ht->param(files => \@files, prefix => $prefix); - print $ht->output; + print $ht->output; ## no critic (RequireCheckedSyscalls) } $default_template = <<'HTML';