]> diplodocus.org Git - flac-archive/commitdiff
minor tag fixes, maybe
authorEric Gillespie <epg@pretzelnet.org>
Thu, 7 Sep 2023 17:25:16 +0000 (12:25 -0500)
committerEric Gillespie <epg@pretzelnet.org>
Thu, 7 Sep 2023 17:25:16 +0000 (12:25 -0500)
fa-mp3cd
tags.pl

index 523139afd9b122a9ef3c60021027ad0fdef6a985..2840016d4a6b9712423889d775b04f3e423bad5b 100755 (executable)
--- a/fa-mp3cd
+++ b/fa-mp3cd
@@ -110,12 +110,16 @@ sub filename {
 }
 
 sub plan_flac {
 }
 
 sub plan_flac {
+    local $@;
     my $workdir = shift;
     my $path = shift;
     my $tags = shift;
     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}})),
      flac => $path,
      filename => filename($tags),
      dir => join('/', $workdir, mangle_for_file_name(@{$tags->{ALBUM}})),
diff --git a/tags.pl b/tags.pl
index ceb590fc721a69691c9d2243d7d3d5c9a8dbad22..76ac44100c8dcfcc40800534b3b7f39dd02223c3 100644 (file)
--- a/tags.pl
+++ b/tags.pl
@@ -94,6 +94,7 @@ sub two_digits {
 }
 
 sub read_tags {
 }
 
 sub read_tags {
+    local $_;
     my $fh = shift;
     my %album;
     my @tracks;
     my $fh = shift;
     my %album;
     my @tracks;
@@ -101,6 +102,7 @@ sub read_tags {
     my $name;
     while (<$fh>) {
         chomp;
     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.
         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:  $_");
         }
             }
             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)) {
         # 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 {
 }
 
 sub read_tags_metaflac {
+    local $@;
     my $fn = shift;
     open(my $fh, '-|', 'metaflac', '--no-utf8-convert', '--export-tags-to=-', $fn) || die("metaflac: $!");
     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 $?")
     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 = @_;
 
 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];
 
     }
     my $album_tag = $tags{ALBUM}->[0];