From: Eric Gillespie Date: Thu, 7 Sep 2023 17:25:16 +0000 (-0500) Subject: minor tag fixes, maybe X-Git-Url: https://diplodocus.org/git/flac-archive/commitdiff_plain/deb54eeee0b63fff448bb865c73ed60f583f44a2?ds=sidebyside;hp=cca5647c8aab40cfad0d1c4eeccbc75c4f6b8142 minor tag fixes, maybe --- diff --git a/fa-mp3cd b/fa-mp3cd index 523139a..2840016 100755 --- a/fa-mp3cd +++ b/fa-mp3cd @@ -110,12 +110,16 @@ sub filename { } sub plan_flac { + local $@; my $workdir = shift; my $path = shift; my $tags = shift; - + my %track_tags = eval { track_tags($tags) }; + if ($@) { + die("$@: $path") + } ( - tags => {track_tags($tags)}, + tags => \%track_tags, flac => $path, filename => filename($tags), dir => join('/', $workdir, mangle_for_file_name(@{$tags->{ALBUM}})), diff --git a/tags.pl b/tags.pl index ceb590f..76ac441 100644 --- a/tags.pl +++ b/tags.pl @@ -94,6 +94,7 @@ sub two_digits { } sub read_tags { + local $_; my $fh = shift; my %album; my @tracks; @@ -101,6 +102,7 @@ sub read_tags { my $name; while (<$fh>) { chomp; + s/^DATE\[US]=200/DATE=200/; # I have DATE[US]=2004 and DATE[US]=2007. TODO fix them and remove hack. if (!s/^([^=[\]]+)(\[(\d+)])?=//) { if (defined($name) && $name eq 'DESCRIPTION') { # Qobuz offers FLAC files like this. @@ -109,7 +111,7 @@ sub read_tags { } die("no field name in: $_"); } - $name = $1; + $name = uc($1); # TODO validate $name # TODO album tags should be illegal after track tags if (defined($3)) { @@ -129,9 +131,13 @@ sub read_tags { } sub read_tags_metaflac { + local $@; my $fn = shift; open(my $fh, '-|', 'metaflac', '--no-utf8-convert', '--export-tags-to=-', $fn) || die("metaflac: $!"); - my @result = read_tags($fh); + my @result = eval { read_tags($fh) }; + if ($@) { + die("$@: $fn") + } if (!close($fh)) { if ($! == 0) { die("metaflac exited $?") @@ -185,8 +191,11 @@ Disc number (zero or one required) as a reference to an array of size 0 or 1. sub disc_tags { my %tags = @_; - if (!defined($tags{ALBUM}) || @{$tags{ALBUM}} != 1) { - die('exactly one ALBUM tag required') + if (!defined($tags{ALBUM}) || @{$tags{ALBUM}} == 0) { + die('exactly one ALBUM tag required, found zero') + } + if (@{$tags{ALBUM}} != 1) { + die('exactly one ALBUM tag required, found [', join("\n", @{$tags{ALBUM}}), ']') } my $album_tag = $tags{ALBUM}->[0];