X-Git-Url: https://diplodocus.org/git/flac-archive/blobdiff_plain/890a5921fe12b21fbc65d88a0e59080dc8cc9a5b..8c91fb1adf9c94a8e3f827d6d329660be2d697a8:/fa-tags diff --git a/fa-tags b/fa-tags index 34eafb8..26d2845 100755 --- a/fa-tags +++ b/fa-tags @@ -1,103 +1,64 @@ -#! /usr/bin/env zsh +#! /usr/bin/env perl # $Id$ -# Copyright (c) 1998-2001 Robert Woodcock -# Copyright (c) 2003-2004 Jesus Climent -# Copyright (c) 2004 Eric Gillespie -# This code is hereby licensed for public consumption under either the -# GNU GPL v2 or greater, or Larry Wall's Artistic license - your choice. +# See fa-flacd for documentation. -set -e +use strict; +use warnings; -if [[ -z ${CDDBURL} ]]; then - CDDBURL="http://freedb.freedb.org/~cddb/cddb.cgi" -fi +use Env qw( + CDDEV +); -get_cddb_protocol () { - for CDDBPROTO in 5 4 3; do - if [[ \ - $(cddb-tool stat $CDDBURL $USER $HOST $CDDBPROTO \ - | sed 's/^\([0-9][0-9]*\).*/\1/;q') = '210' ]]; then - return 0 - fi - done +use Getopt::Long; +use Pod::Usage; - echo "${CDDBURL} does not work" - exit 2 -} - -handle_read=$(< \$help, + ) or pod2usage(); +$help and pod2usage(-exitstatus=>0, -verbose=>1); -} elsif (/^DYEAR=/) { - print("DATE=\$value\\n"); +my $trackcount = shift or pod2usage(); -} elsif (/^TTITLE\\d+/) { - print("TITLE=\$value\\n"); +my $mb; +if (defined($CDDEV)) { + $mb = new MusicBrainz::Client::Simple (device=>$CDDEV); +} else { + $mb = new MusicBrainz::Client::Simple; } -EOF -) -handle_queries () { - local F - local i=1 - - # First eat the status line. - read F - - while read -A F; do - [[ $F = '.' ]] && break - cddb-tool read $CDDBURL $CDDBPROTO $USER $HOST $F[1] $F[2] \ - | nawk $handle_read > candidate-tags-$i -# XXX The awk script has at least one problem; since we can't split to -# exactly two components, we break on track names with equal signs. -# Use Perl instead: -# cddb-tool read $CDDBURL $CDDBPROTO $USER $HOST $F[1] $F[2] \ -# | perl -lne $handle_read > candidate-tags-$i - i=$(( $i + 1 )) - done +my @result = $mb->lookup_cd; +die($mb->get_error) unless $mb->success; + +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'): $!"); + +my $i; +for my $album (@result) { + $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"); + print(F "DATE=\n"); + + my @tracks = $album->get_tracks; + my $name; + my $track; + for my $j (1 .. $trackcount) { + if ($track = shift(@tracks)) { + $name = $track->get_name; + } else { + $name = ''; + } + print(F "TITLE=$name\n"); + } + + close(F) or die("close('>candidate-tags-$i'): $!"); } - -get_cddb_protocol -(cddb-tool query $CDDBURL $CDDBPROTO $USER $HOST "$@" | handle_queries) & - -cat > candidate-tags-0 <