Clean up licensing statements in cddb-tool
[abcde.git] / cddb-tool
index 430e091..06901a0 100755 (executable)
--- a/cddb-tool
+++ b/cddb-tool
@@ -1,17 +1,15 @@
-#!/bin/sh
+#!/bin/bash
 
 # Copyright (C) 1999 Nathaniel Smith <njs@uclink4.berkeley.edu>
 # Copyright (C) 1999, 2000, 2001 Robert Woodcock <rcw@debian.org>
-# Copyright (C) 2003, 2004 Jesus Climent <jesus.climent@hispalinux.es>
+# Copyright (C) 2003, 2005 Jesus Climent <jesus.climent@hispalinux.es>
+# Copyright (c) 2012-     Steve McIntyre <93sam@@debian.org>
 # This code is hereby licensed for public consumption under either the
 # GNU GPL v2 or greater, or Larry Wall's Artistic License - your choice.
 #
-# You should have recieved a copy of the GNU General Public License
+# You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-# Copyright for this work is to expire January 1, 2010, after which it
-# shall be public domain.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # TODO:
 #  - Add more error checking
@@ -21,7 +19,7 @@
 #  - Submitted via: line is created by template, when it really should be in send.
 #    Oh well.
 
-VERSION=0.4.5
+VERSION=0.4.7
 NAME=cddb-tool
 
 #return codes
@@ -36,12 +34,15 @@ if [ "$HTTPGET" = "" ]; then
        if [ X"$(uname)" = X"FreeBSD" ] ; then
                HTTPGET=fetch
                HTTPGETOPTS=${HTTPGETOPTS:="-q -o -"}
+       elif [ X"$(uname)" = X"NetBSD" ] ; then
+               HTTPGET=ftp
+               HTTPGETOPTS=${HTTPGETOPTS:="-a -V -o - "}
        elif [ X"$(uname)" = X"Darwin" ] ; then
                HTTPGET=curl
                HTTPGETOPTS=${HTTPGETOPTS:="-f -s"}
        else
                HTTPGET=wget
-               HTTPGETOPTS=${HTTPGETOPTS:="-q -O -"}
+               HTTPGETOPTS=${HTTPGETOPTS:="-q -nv -e timestamping=off -O -"}
        fi
 fi
 
@@ -83,7 +84,7 @@ Commands:
   query server proto user host disc-id tracks
        Looks up disc on server (should be of form "http://host/~cddb/cddb.cgi")
        remainder of command line is in the same form as that returned
-       by the cd-discid program.  
+       by the cd-discid program.
   read server proto user host disc-id genre
        CDDB file is dumped to stdout. File will contain an extra
        #CATEGORY= line, which leaves it a valid CDDB file but which will
@@ -95,7 +96,7 @@ Commands:
        if the server supports given protocol. Most common values for proto
        should be 5 and 3. With 3 you will not get DYEAR and DGENRE fields
        in response.
-  help  
+  help
        Display this.
 EOF
 }
@@ -110,19 +111,33 @@ f_seq ()
        done
 }
 
+new_checkexec ()
+{
+       if [ ! "$@" = "" ]; then
+               # Cut off any command-line option we added in
+               X=$(echo $@ | cut -d' ' -f2)
+               if [ "$(which $X)" = "" ]; then
+                       return 1
+               elif [ ! -x $(which $X) ]; then
+                       return 2
+               fi
+       fi
+       return 0
+}
+
 COMMAND=$1
 shift
 case $COMMAND in
 parse) # takes 1 argument, a filename, and dumps out a sh parseable version
        CDDBFILE="$1"
-       
+
        set -e
        # names chosen to match usage in abcde code
        DISCID=$(grep ^DISCID= "$CDDBFILE" | cut -f2 -d= | tr -d \[:cntrl:\])
-       DARTISTALBUM=$(grep ^DTITLE= "$CDDBFILE" | cut -f2- -d= | tr -d \\n | sed 's- / -~-g' | tr -d \[:cntrl:\])
-       DARTIST=$(echo "$DARTISTALBUM" | cut -f1 -d~ | sed 's,\\,\\\\,g;s,\([\"\$\`]\),\\\1,g' | tr -d \[:cntrl:\])
-       DALBUM=$(echo "$DARTISTALBUM" | cut -f2 -d~ | sed 's,\\,\\\\,g;s,\([\"\$\`]\),\\\1,g' | tr -d \[:cntrl:\])
-       CDDBGENRE=$(grep '^#CATEGORY=' "$CDDBFILE" | cut -f2- -d= | tr -d \[:cntrl:\])
+       DARTISTALBUM="$(grep ^DTITLE= "$CDDBFILE" | cut -f2- -d= | tr -d \\n | sed 's- / -~-g' | tr -d \[:cntrl:\])"
+       DARTIST="$(echo "$DARTISTALBUM" | cut -f1 -d~ | sed 's,\\,\\\\,g;s,\([\"\$\`]\),\\\1,g' | tr -d \[:cntrl:\])"
+       DALBUM="$(echo "$DARTISTALBUM" | cut -f2 -d~ | sed 's,\\,\\\\,g;s,\([\"\$\`]\),\\\1,g' | tr -d \[:cntrl:\])"
+       CDDBGENRE="$(grep '^#CATEGORY=' "$CDDBFILE" | cut -f2- -d= | tr -d \[:cntrl:\])"
        if grep "^DYEAR" "$CDDBFILE" 2>&1 > /dev/null ; then
                CDYEAR=$(grep "^DYEAR" "$CDDBFILE" | cut -f2- -d= | tr -d \[:cntrl:\])
        elif grep YEAR "$CDDBFILE" 2>&1 > /dev/null ; then
@@ -193,7 +208,18 @@ send) # cddb-tool send filename email@address
        ADDRESS="$2"
        DISCID=$(grep ^DISCID= "$FILE" | cut -f2 -d= | tr -d \[:cntrl:\])
        CDDBGENRE=$(grep '^#CATEGORY=' "$FILE" | cut -f2- -d= | tr -d \[:cntrl:\])
-       grep -v "^#CATEGORY=" "$FILE" | mail -s "cddb $CDDBGENRE $DISCID" "$ADDRESS"
+       # Use bsd-mailx by preference if we can, as it allows addition
+       # of extra headers. Otherwise, try to force UTF-8 via environment
+       if new_checkexec bsd-mailx; then
+               grep -v "^#CATEGORY=" "$FILE" | iconv -t utf-8 | bsd-mailx -a "Content-Type: text/plain; charset=utf-8" -s "cddb $CDDBGENRE $DISCID" "$ADDRESS"
+       else
+               # Find the first UTF-8 locale on the system, if any
+               UTF_LOCALE=$(locale -a | awk '/UTF-8/ { print $1; exit}')
+               if [ "$UTF_LOCALE"x != ""x ] ; then
+                       export LC_ALL=$UTF_LOCALE
+               fi
+               grep -v "^#CATEGORY=" "$FILE" | iconv -t utf-8 | mail -s "cddb $CDDBGENRE $DISCID" "$ADDRESS"
+       fi
        ;;
 
 query) # cddb-tool query serverurl proto user host discid...
@@ -205,8 +231,8 @@ query) # cddb-tool query serverurl proto user host discid...
        shift 4
        TRACKINFO="$@"
        TRACKINFOPLUS=$(echo $TRACKINFO | tr ' ' '+')
-       RESULTS=$($HTTPGET "$SERVER?cmd=cddb+query+$TRACKINFOPLUS\&hello=$HELLOINFO\&proto=$PROTO") || exit $LOOKUP_ERR
-       echo $RESULTS | tr '\r' '\n' | tr -s '\n' | sed 's/^ //g'
+       RESULTS=$($HTTPGET "$SERVER?cmd=cddb+query+$TRACKINFOPLUS&hello=$HELLOINFO&proto=$PROTO") || exit $LOOKUP_ERR
+       echo "$RESULTS" | tr '\r' '\n' | tr -s '\n' | sed 's/^ //g'
        ;;
 
 read) # cddb-tool read serverurl proto user host genre discnumber
@@ -217,7 +243,7 @@ read) # cddb-tool read serverurl proto user host genre discnumber
        CATEGORY="$5"
        DISCID="$6"
        HELLOINFO="$USER+$HOST+$NAME+$VERSION"
-       $HTTPGET $CDDBDATA "$SERVER?cmd=cddb+read+$CATEGORY+$DISCID\&hello=$HELLOINFO\&proto=$PROTO" 2>/dev/null
+       $HTTPGET $CDDBDATA "$SERVER?cmd=cddb+read+$CATEGORY+$DISCID&hello=$HELLOINFO&proto=$PROTO" 2>/dev/null
        ;;
 
 stat) # cddb-tool stat serverurl user host proto
@@ -226,7 +252,7 @@ stat) # cddb-tool stat serverurl user host proto
        HOST="$3"
        PROTO="$4"
        HELLOINFO="$USER+$HOST+$NAME+$VERSION"
-       $HTTPGET $CDDBDATA "$SERVER?cmd=stat&hello=$HELLOINFO\&proto=$PROTO" 2>/dev/null
+       $HTTPGET $CDDBDATA "$SERVER?cmd=stat&hello=$HELLOINFO&proto=$PROTO" 2>/dev/null
        ;;
 
 help) # help