use warnings;
use FindBin;
-# TODO eval hack
-eval {
- require "$FindBin::Bin/flac2mp3";
- #require "$FindBin::Bin/tags.pl";
-};
+use lib $FindBin::Bin;
+
+require 'flac2mp3';
+require 'tags.pl';
epg::flac::archive::tags->import(
qw[
track_tags
two_digits
]);
+sub filename {
+ my $tags = shift;
+ mangle_for_file_name(
+ join(' ',
+ (map { two_digits($_) } @{$tags->{DISCNUMBER} // []}),
+ (map { two_digits($_) } @{$tags->{TRACKNUMBER} // []}),
+ @{$tags->{TITLE}},
+ )
+ ) . '.mp3';
+}
+
sub plan_flac {
+ local $@;
my $workdir = shift;
my $path = shift;
my $tags = shift;
-
- my %track = track_tags($tags);
- $track{flac} = $path;
- $track{filename} = mangle_for_file_name(
- join(' ',
- (map { two_digits($_) } @{$track{discnumber}}),
- two_digits($track{tracknumber}),
- $track{title},
- )) . '.mp3';
- $track{dir} = join('/', $workdir, mangle_for_file_name($track{album}));
- \%track
+ my %track_tags = eval { track_tags($tags) };
+ if ($@) {
+ die("$@: $path")
+ }
+ (
+ tags => \%track_tags,
+ flac => $path,
+ filename => filename($tags),
+ dir => join('/', $workdir, mangle_for_file_name(@{$tags->{ALBUM}})),
+ )
}
sub plan {
my $workdir = shift;
- map { plan_flac($workdir, @$_) } @_
+ map { {plan_flac($workdir, @$_)} } @_
}
# if @layout is partially on disk, return the portion that remains to be written
));
for my $mp3 (@layout) {
say('mkdir -p ' . $mp3->{dir});
- epg::flac::archive::mp3::flac2mp3(join('/', $mp3->{dir}, $mp3->{filename}), $mp3->{flac}, $mp3);
+ epg::flac::archive::mp3::flac2mp3(join('/', $mp3->{dir}, $mp3->{filename}), $mp3->{flac}, $mp3->{tags});
}
my @output;