X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FApp%2FMusicExpo.pm;h=a55b53ce8497322bc3b5107b5da9dc12d3012725;hb=3f12a3221f4b752a93dc4bb3780708b0201ddd6e;hp=bf7707078223a04698aba63923e7d5e1b0b9a64a;hpb=0397e9d0174ed48b439512065209fc4652f2a343;p=app-musicexpo.git diff --git a/lib/App/MusicExpo.pm b/lib/App/MusicExpo.pm index bf77070..a55b53c 100644 --- a/lib/App/MusicExpo.pm +++ b/lib/App/MusicExpo.pm @@ -3,7 +3,7 @@ use v5.14; use strict; use warnings; -our $VERSION = '0.004'; +our $VERSION = '0.005'; use Audio::FLAC::Header qw//; use HTML::Template::Compiled qw//; @@ -16,7 +16,6 @@ use DB_File qw//; use File::Basename qw/fileparse/; use Fcntl qw/O_RDWR O_CREAT/; use Getopt::Long; -use JSON::MaybeXS; use Storable qw/thaw freeze/; ################################################## @@ -120,27 +119,34 @@ sub mp4info{ }; } +my %info = ( + '.flac' => \&flacinfo, + '.mp3' => \&mp3info, + '.ogg' => \&vorbisinfo, + '.oga' => \&vorbisinfo, + '.mp4' => \&mp4info, + '.aac' => \&mp4info, + '.m4a' => \&mp4info, +); + sub normalizer{ "$_[0]|".(stat $_[0])[9] } +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; - memoize $_, NORMALIZER => \&normalizer, LIST_CACHE => 'MERGE', SCALAR_CACHE => [HASH => \%cache] for qw/flacinfo mp3info vorbisinfo mp4info/; + $info{$_} = memoize $info{$_}, INSTALL => undef, NORMALIZER => \&normalizer, LIST_CACHE => 'FAULT', SCALAR_CACHE => [HASH => \%cache] for keys %info; } my %files; for my $file (@ARGV) { - my $info; - $info = thaw flacinfo $file if $file =~ /\.flac$/i; - $info = thaw mp3info $file if $file =~ /\.mp3$/i; - $info = thaw vorbisinfo $file if $file =~ /\.og(?:g|a)$/i; - $info = thaw mp4info $file if $file =~ /\.mp4|\.aac|\.m4a$/i; - next unless defined $info; - my $basename = fileparse $file, '.flac', '.mp3', '.ogg', '.oga', '.mp4', '.aac', '.m4a'; + my ($basename, undef, $suffix) = fileparse $file, keys %info; $files{$basename} //= []; - push @{$files{$basename}}, $info; + push @{$files{$basename}}, thaw scalar $info{$suffix}->($file); } my $ht=HTML::Template::Compiled->new( @@ -160,13 +166,12 @@ sub run { } } delete $entry{$_} for qw/format file/; + $entry{fragment} = make_fragment @entry{qw/artist title/}; push @files, \%entry } - my $json = JSON::MaybeXS->new(canonical => 1)->encode({files => \@files, prefix => $prefix}); - $json =~ s//>/g; - $ht->param(files=>[sort { $a->{title} cmp $b->{title} } @files], prefix => $prefix, json => $json); + @files = sort { $a->{title} cmp $b->{title} } @files; + $ht->param(files => \@files, prefix => $prefix); print $ht->output; } @@ -174,16 +179,17 @@ $default_template = <<'HTML'; Music - + + + +
-
TitleArtistAlbumGenreTrackYearType
/ +
/
- - HTML 1; @@ -240,7 +246,7 @@ Marius Gavrilescu, Emarius@ieval.roE =head1 COPYRIGHT AND LICENSE -Copyright (C) 2013-2014 by Marius Gavrilescu +Copyright (C) 2013-2015 by Marius Gavrilescu This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.14.2 or,