X-Git-Url: https://diplodocus.org/git/flac-archive/blobdiff_plain/cfd5982bbc4e0321c4bf6e13ac54337f38372066..10d83bbfbcd2461f4fd53f6bc17d1250922214b5:/fa-encode diff --git a/fa-encode b/fa-encode index 5a8a72d..c18b1bc 100755 --- a/fa-encode +++ b/fa-encode @@ -61,50 +61,21 @@ package epg::flac::archive::encode; use v5.12; use warnings; -sub mangle_for_file_name { - my $fn = shift; - $fn =~ s/\s+/_/g; - $fn =~ s/[^A-Za-z0-9._]/-/g; - $fn -} - -sub read_tags { - my $fn = shift; - open(my $fh, '<', $fn) || die("open($fn): $!"); - my %album; - my @tracks; - my $tracknum = 0; - while (<$fh>) { - chomp; - s/^([^=[\]]+)(\[(\d+)])?=// || die("no field name in $_"); - my $name = $1; - # TODO validate $name - # TODO album tags should be illegal after track tags - if (defined($3)) { - if ($3 == $tracknum + 2) { - $tracknum++; - } elsif ($3 != $tracknum + 1) { - $tracknum++; # increment from 0 to 1 for error message - die("illegal track number jump from $tracknum to $3") - } - push(@{$tracks[$tracknum]->{$name}}, $_); - } else { - push(@{$album{$name}}, $_); - } - } +use FindBin; - \%album, \@tracks -} - -sub quote { - my $s = shift; - $s =~ s/'/'\\''/g; - "'$s'" -} +require "$FindBin::Bin/tags.p"; +epg::flac::archive::tags->import( + qw[ + read_tags + mangle_for_file_name + quote + ]); sub main { my $input_directory = shift; - my ($album, $tracks) = read_tags("$input_directory/tags"); + my $fn = "$input_directory/tags"; + open(my $fh, '<', $fn) || die("open($fn): $!"); + my ($album, $tracks) = read_tags($fh); if (!defined($album->{ALBUM}) || scalar(@{$album->{ALBUM}}) != 1) { die('exactly one ALBUM tag required') } @@ -127,7 +98,7 @@ sub main { if (scalar(@{$album->{DISCNUMBER}}) != 1) { die('one or zero DISCNUMBER tags required') } - @discnumber = (sprintf('%02d', $album->{DISCNUMBER}->[0])); + @discnumber = ($album->{DISCNUMBER}->[0]); } my $dir = join('/', '..', mangle_for_file_name($artist), mangle_for_file_name($album_tag)); @@ -156,7 +127,7 @@ sub main { my $fn = join('/', $dir, join('_', - @discnumber, + (map { sprintf('%02d', $_) } @discnumber), $tracknum_s, mangle_for_file_name($title) . '.flac', ),