X-Git-Url: https://diplodocus.org/git/flac-archive/blobdiff_plain/a985282778e722a8f7753c277030bd7456f095fa..217996b6b377ce6f7af3bc66a473ccda5e508b8e:/fa-rip diff --git a/fa-rip b/fa-rip index 916c050..e9ad756 100755 --- a/fa-rip +++ b/fa-rip @@ -74,6 +74,36 @@ sub mkcue { return $trackcount; } +sub tags_file { + my $fn = shift; + my $trackcount = shift; + my $various = shift; + my $artist = shift; + my $album = shift; + my $fh; + my $i; + my $track; + my $name; + + open($fh, '>', $fn) or die("open('>$fn'): $!"); + print($fh 'ARTIST=', (defined($artist) and $artist or ''), "\n"); + print($fh 'ALBUM=', (defined($album) and $album or ''), "\n"); + # MusicBrainz doesn't have dates yet; these are usually wrong anyway. + print($fh "DATE=\n"); + + for $i (1 .. $trackcount) { + $various and print($fh "ARTIST[$i]=\n"); + if ($track = shift(@_)) { + $name = $track->get_name; + } else { + $name = ''; + } + print($fh "TITLE[$i]=$name\n"); + } + + close($fh) or die("close(>$fn): $!"); +} + sub tags { my $device = shift; my $trackcount = shift; @@ -81,10 +111,8 @@ sub tags { my @results; my $album; my $i; - my @tracks; - my $name; - my $track; - my $j; + my $various; + my $seen_various; if (defined($device)) { $mb = new MusicBrainz::Client::Simple (device=>$device); @@ -97,32 +125,21 @@ sub tags { die($mb->get_error); } - open(F, '>candidate-tags-0') or die("open('>candidate-tags-0'): $!"); - print(F "$_=\n") for ('ARTIST', 'ALBUM', 'DATE'); - print(F "TITLE=\n") for 1 .. $trackcount; - close(F) or die("close('>candidate-tags-0'): $!"); + tags_file('candidate-tags-0', $trackcount, 0); for $album (@results) { $i++; - open(F, ">candidate-tags-$i") or die("open(>candidate-tags-$i): $!"); - - print(F 'ARTIST=', $album->get_artist->get_name, "\n"); - print(F 'ALBUM=', $album->get_name, "\n"); - - # MusicBrainz doesn't have dates yet; these are usually wrong anyway. - print(F "DATE=\n"); - @tracks = $album->get_tracks; - for $j (1 .. $trackcount) { - if ($track = shift(@tracks)) { - $name = $track->get_name; - } else { - $name = ''; + if ($various = $album->has_various_artists) { + if (not $seen_various) { + $seen_various = 1; + tags_file('candidate-tags-0v', $trackcount, 1); } - print(F "TITLE=$name\n"); } - close(F) or die("close(>candidate-tags-$i): $!"); + tags_file("candidate-tags-$i", $trackcount, $various, + $album->get_artist->get_name, $album->get_name, + $album->get_tracks); } }