use warnings;
use FindBin;
+use Pod::Usage;
-require "$FindBin::Bin/tags.p";
+use lib $FindBin::Bin;
+
+require 'tags.pl';
epg::flac::archive::tags->import(
qw[
read_tags
mangle_for_file_name
quote
+ track_tags_from_disc
+ two_digits
]);
+sub filename {
+ my ($tracknumber, $tags) = @_;
+ my $title = $tags->{TITLE} // die('title required');
+ my @discnumber = @{$tags->{DISCNUMBER} // []};
+ my @partnumber = @{$tags->{PARTNUMBER} // []};
+ my @version = @{$tags->{VERSION} // []};
+ join('-',
+ (map { two_digits($_) } @discnumber),
+ two_digits($tracknumber),
+ mangle_for_file_name(join('TODO multi-title?', @$title)),
+ # TODO more than one VERSION?
+ (map { mangle_for_file_name($_) } @version),
+ @partnumber,
+ )
+ . '.flac',
+}
+
sub main {
- my $input_directory = shift;
+ my $input_directory = shift || pod2usage();
my $fn = "$input_directory/tags";
open(my $fh, '<', $fn) || die("open($fn): $!");
my ($album, $tracks) = read_tags($fh);
my $dir = join('/', '..', mangle_for_file_name($artist), mangle_for_file_name($album_tag));
say('set -ex');
+ say('cd ', quote($input_directory));
say('mkdir -p ', quote($dir));
my $tracknum = 0;
for my $track (@$tracks) {
$track->{DISCNUMBER} = \@discnumber;
}
my $title = join(' ', @{$track->{TITLE}});
- my $tracknum_s = sprintf('%02d', $tracknum);
my $fn = join('/',
$dir,
- join('_',
- (map { sprintf('%02d', $_) } @discnumber),
- $tracknum_s,
- mangle_for_file_name($title) . '.flac',
+ filename(
+ $tracknum,
+ {track_tags_from_disc($album, $tracks, $tracknum)}
),
);
-e $fn && die("cowardly refusing to clobber $fn");
my @pictures = ('--picture', quote('3|image/jpeg|||cover.front.jpeg')); # TODO optional
+ @pictures = (); # XXX
+ my $tracknum_s = two_digits($tracknum);
say(join(' ',
'flac -o',
quote($fn),