X-Git-Url: https://git.hcoop.net/clinton/abcde.git/blobdiff_plain/9bd5228d4a520626d624074e8883a02cc9aacde2..37bd22e5cf79383bdbe6cff0db302e6d1600b52d:/abcde diff --git a/abcde b/abcde index 0ca4542..69d0674 100755 --- a/abcde +++ b/abcde @@ -13,7 +13,7 @@ # # $Id$ -VERSION='2.3.99.8' +VERSION='2.4' usage () { @@ -390,7 +390,7 @@ diffentries () if [ $PARSECHOICE1 -lt 1 ] || [ $PARSECHOICE1 -gt $CDDBDIFFCHOICES ] || \ [ $PARSECHOICE2 -lt 1 ] || [ $PARSECHOICE2 -gt $CDDBDIFFCHOICES ] || \ [ $PARSECHOICE1 -eq $PARSECHOICE2 ]; then - echo "Invalid diff range. Please select two coma-separated numbers between 1 and $CDDBDIFFCHOICES" >&2 + echo "Invalid diff range. Please select two comma-separated numbers between 1 and $CDDBDIFFCHOICES" >&2 else # We parse the 2 choices to diff, store them in temporary files and diff them. for PARSECHOICE in $(echo $CDDBDIFFCHOICE | tr , \ ); do @@ -548,7 +548,7 @@ do_replaygain() run_command replaygain-vorbis nice $ENCNICE $VORBISGAIN --album "${OUTPUTFILES[@]}" ;; mp3) - run_command replaygain-mp3 nice $ENCNICE $MP3GAIN -a "${OUTPUTFILES[@]}" + run_command replaygain-mp3 nice $ENCNICE $MP3GAIN -a -k "${OUTPUTFILES[@]}" ;; mpc) run_command replaygain-mpc nice $ENCNICE $MPPGAIN --auto "${OUTPUTFILES[@]}" @@ -799,6 +799,11 @@ do_tag () mp3) # id3v2 v0.1.9 claims to have solved the -c bug, so we merge both id3 and id3v2 GENREID=$(do_getgenreid "${CDGENRE}") + # Set TPE2 in case we have a Various Artists rip. + TPE2="" + if [ "$VARIOUSARTISTS" = "y"]; then + TPE2="Various" + fi case "$ID3SYNTAX" in id3);; @@ -811,6 +816,7 @@ do_tag () -G "$GENREID" -n "${TRACKNUM:-$1}" \ "${TRACKNUM:+-N $TRACKS}" \ "${ENCODING:+--set-encoding=$ENCODING}" \ + "${TPE2:+--set-user-text-frame=TPE2:$TPE2}" \ "$ABCDETEMPDIR/track$1.$OUTPUT" ;; # FIXME # Still not activated... @@ -829,6 +835,7 @@ do_tag () -A "$DALBUM" -a "$TRACKARTIST" -t "$TRACKNAME" \ -y "$CDYEAR" -g "$GENREID" \ -T "${TRACKNUM:-$1/$TRACKS}" \ + "${TPE2:+--TPE2 \"$TPE2\"}" \ "$ABCDETEMPDIR/track$1.$OUTPUT" ;; esac @@ -1883,11 +1890,11 @@ do_discid () exit 1 fi echo -n . - # It's a directory, let's see if it's owned by us - if [ ! -O "$ABCDETEMPDIR" ]; then + # It's a directory, let's see if it's writable by us + if [ ! -r "$ABCDETEMPDIR" ] || [ ! -w "$ABCDETEMPDIR" ] || [ ! -x "$ABCDETEMPDIR" ]; then # Nope, complain and exit echo >&2 - echo "abcde: directory $ABCDETEMPDIR already exists and is not owned by you." >&2 + echo "abcde: directory $ABCDETEMPDIR already exists and is not writeable." >&2 echo "Please investigate, remove it, and rerun abcde." >&2 exit 1 fi @@ -2206,11 +2213,21 @@ do_cddbstat () RESPONSECODE=$(head -n 1 "$ABCDETEMPDIR/cddbstat" | cut -f1 -d' ') case "$RESPONSECODE" in 210) # 210 OK, status information follows (until terminating `.') - rc=0; + rc=0 ;; - 501|*) # 501 Illegal CDDB protocol level: . + 501) # 501 Illegal CDDB protocol level: . CDDBPROTO=`expr $CDDBPROTO - 1` ;; + *) # Try a cddb query, since freedb2.org doesn't support the stat or ver commands + # FreeDB TESTCD disc-id is used for query + $CDDBTOOL query $CDDBURL $CDDBPROTO $CDDBUSER $CDDBHOST 03015501 1 296 344 > "$ABCDETEMPDIR/cddbstat" + RESPONSECODE=$(head -n 1 "$ABCDETEMPDIR/cddbstat" | cut -f1 -d' ') + case "$RESPONSECODE" in + 2??) # Server responded, everything seems OK + rc=0 + ;; + esac + ;; esac done if test $rc -eq 1; then @@ -2417,7 +2434,7 @@ do_cddbedit () if [ $PARSECHOICE1 -lt 1 ] || [ $PARSECHOICE1 -gt $CDDBCHOICES ] || \ [ $PARSECHOICE2 -lt 1 ] || [ $PARSECHOICE2 -gt $CDDBCHOICES ] || \ [ $PARSECHOICE1 -eq $PARSECHOICE2 ]; then - echo "Invalid diff range. Please select two coma-separated numbers between 1 and $CDDBCHOICES" >&2 + echo "Invalid diff range. Please select two comma-separated numbers between 1 and $CDDBCHOICES" >&2 else # We parse the 2 choices to diff, store them in temporary files and diff them. for PARSECHOICE in $(echo $CDDBCHOICE | tr , \ ); do @@ -2719,7 +2736,7 @@ do_cdread () if [ "$USEPIPES" = "y" ]; then TEMPARG="PIPERIPPER_$CDROMREADERSYNTAX" FILEARG="$( eval echo "\$$TEMPARG" )" - REDIR="" + REDIR="y" PIPE_MESSAGE="and encoding " else WAVDATA="$ABCDETEMPDIR/track$UTRACKNUM.wav" @@ -2735,7 +2752,7 @@ do_cdread () FILEARG="$WAVDATA" ;; esac - REDIR=">&2" + REDIR="n" fi if [ "$1" = "onetrack" ]; then echo "Grabbing ${PIPE_MESSAGE}tracks $UTRACKNUM - $LASTTRACK as one track ..." >&2 @@ -2755,7 +2772,12 @@ do_cdread () STRIPTRACKNUM=$(expr $UTRACKNUM + 0) nice $READNICE $FLAC -d -f --cue=${READTRACKNUMS:-$STRIPTRACKNUM.1-$(($STRIPTRACKNUM + 1)).0} "$FILEARG" "$CDROM" ;; cdparanoia) - nice $READNICE $CDROMREADER -$CDPARANOIACDROMBUS "$CDROM" ${READTRACKNUMS:-$UTRACKNUM} "$FILEARG" $REDIR ;; + if [ "$REDIR" = "y"]; then + nice $READNICE $CDROMREADER -$CDPARANOIACDROMBUS "$CDROM" ${READTRACKNUMS:-$UTRACKNUM} "$FILEARG" >&2 + else + nice $READNICE $CDROMREADER -$CDPARANOIACDROMBUS "$CDROM" ${READTRACKNUMS:-$UTRACKNUM} "$FILEARG" + fi;; + cdda2wav) if [ "$OSFLAVOUR" = "OSX" ] ; then # Hei, we have to unmount the device before running anything like cdda2wav in OSX @@ -2771,12 +2793,19 @@ do_cdread () CDDA2WAVCDROM="$CDROMID" fi fi - nice $READNICE $CDROMREADER -D $CDDA2WAVCDROM -t ${READTRACKNUMS:-$UTRACKNUM} "$FILEARG" $REDIR - ;; + if [ "$REDIR" = "y"]; then + nice $READNICE $CDROMREADER -D $CDDA2WAVCDROM -t ${READTRACKNUMS:-$UTRACKNUM} "$FILEARG" >&2 + else + nice $READNICE $CDROMREADER -D $CDDA2WAVCDROM -t ${READTRACKNUMS:-$UTRACKNUM} "$FILEARG" + fi ;; ## FIXME ## We have an exception for dagrab, since it uses -f ## FIXME ## Shall we just use -f $FILEARG ?? - dagrab) nice $READNICE $CDROMREADER -d "$CDROM" -v $UTRACKNUM "$FILEARG" $REDIR - ;; + dagrab) + if [ "$REDIR" = "y"]; then + nice $READNICE $CDROMREADER -d "$CDROM" -v $UTRACKNUM "$FILEARG" >&2 + else + nice $READNICE $CDROMREADER -d "$CDROM" -v $UTRACKNUM "$FILEARG" + fi ;; cddafs) # Find the track's mounted path REALTRACKNUM=$(expr $UTRACKNUM + 0) @@ -2784,12 +2813,20 @@ do_cdread () FILEPATH=$(find "$FILEPATH" | grep "/$REALTRACKNUM "); # If the file exists, copy it if [ -e "$FILEPATH" ] ; then - nice $READNICE $CDROMREADER "$FILEPATH" "$FILEARG" $REDIR + if [ "$REDIR" = "y"]; then + nice $READNICE $CDROMREADER "$FILEPATH" "$FILEARG" >&2 + else + nice $READNICE $CDROMREADER "$FILEPATH" "$FILEARG" + fi else false fi ;; - debug) nice $READNICE $CDROMREADER -$CDPARANOIACDROMBUS "$CDROM" -w $UTRACKNUM-[:1] "$FILEARG" $REDIR - ;; + debug) + if [ "$REDIR" = "y"]; then + nice $READNICE $CDROMREADER -$CDPARANOIACDROMBUS "$CDROM" -w $UTRACKNUM-[:1] "$FILEARG" >&2 + else + nice $READNICE $CDROMREADER -$CDPARANOIACDROMBUS "$CDROM" -w $UTRACKNUM-[:1] "$FILEARG" + fi ;; esac RETURN=$? # If we get some error or we get some missing wav @@ -3291,14 +3328,17 @@ if [ "$ONETRACK" = "y" ]; then else while [ $# -gt 0 ]; do # Range parsing code courtesy of Vincent Ho - RSTART=$(echo $1 | cut -f1 -d-) - REND=$(echo $1 | cut -f2 -d-) - if [ "$RSTART" = "$REND" ]; then - NEWTRACKS="$RSTART" - else - NEWTRACKS=$(f_seq_line $RSTART $REND) - fi - TRACKQUEUE=$(echo "$TRACKQUEUE" "$NEWTRACKS") + # Cleaned up to use shell built-ins by Charles Steinkuehler + if [ "${1#*[^0-9-]}" != "$1" ]; then + log error "syntax error while processing track numbers" + else + RSTART=${1%%-*} + REND=${1##*-} + while [ ${RSTART:=1} -le ${REND:=0} ] ; do + TRACKQUEUE="$TRACKQUEUE $RSTART" + RSTART=$(( $RSTART + 1 )) + done + fi shift done fi