X-Git-Url: https://git.hcoop.net/clinton/abcde.git/blobdiff_plain/1945e2381836df6058fb7f3e3ee6da7448a7c436..8d685d4857b631bc14637a7d09c75726e3b8e305:/abcde diff --git a/abcde b/abcde index b3542b0..749a86a 100755 --- a/abcde +++ b/abcde @@ -13,7 +13,7 @@ # # $Id$ -VERSION='2.4.2' +VERSION='2.5.1-UNRELEASED' usage () { @@ -156,7 +156,7 @@ checkstatus () { # Take the last line in the status file if there's multiple matches PATTERN="^$1(=.*)?$" - BLURB=$(egrep $PATTERN "$ABCDETEMPDIR/status" | tail -n 1) + BLURB=$(grep -E $PATTERN "$ABCDETEMPDIR/status" | tail -n 1) if [ -z "$BLURB" ]; then # No matches found @@ -183,7 +183,7 @@ checkwarnings () fi # Take the last line in the status file if there's multiple matches PATTERN="^$1(:.*)?$" - BLURB="$(egrep $PATTERN "$ABCDETEMPDIR/warnings" | tail -n 1)" + BLURB="$(grep -E $PATTERN "$ABCDETEMPDIR/warnings" | tail -n 1)" if [ -z "$BLURB" ]; then # negative, we did not have a negative... @@ -206,7 +206,7 @@ checkerrors () fi # Take the last line in the status file if there's multiple matches PATTERN="^$1(:.*)?$" - BLURB="$(egrep $PATTERN "$ABCDETEMPDIR/errors" | tail -n 1)" + BLURB="$(grep -E $PATTERN "$ABCDETEMPDIR/errors" | tail -n 1)" if [ -z "$BLURB" ]; then # negative, we did not have a negative... @@ -489,8 +489,18 @@ makeids () PREGAP=$(($(echo $OFFSETS | cut -f1 -d' '))) TOTALTIME=$(( (($LEADOUT + $LEADIN + $PREGAP) / $CDFRAMES) - (($LEADIN + $PREGAP) / $CDFRAMES))) - printf -v HEXSUM "%08lx" $(( ($CDDBCKSUM % 0xff) << 24 | $TOTALTIME << 8 | $TRACKS)) - TRACKINFO="${HEXSUM} $((TRACKS)) ${COOKEDOFFSETS} $((($LEADOUT + $LEADIN + $IDMAGICNUM) / $CDFRAMES))" + case "$CDDBMETHOD" in + cddb) + printf -v DISCID "%08lx" $(( ($CDDBCKSUM % 0xff) << 24 | $TOTALTIME << 8 | $TRACKS)) + ;; + musicbrainz) + # FIXME: don't assume the first track is 1 + echo "dasd: 1 $TRACKS $LEADIN $LEADOUT $OFFSETS " + DISCID=$($MUSICBRAINZ --command calcid --discinfo 1 $TRACKS $LEADIN $LEADOUT $OFFSETS) + ;; + esac + + TRACKINFO="${DISCID} $((TRACKS)) ${COOKEDOFFSETS} $((($LEADOUT + $LEADIN + $IDMAGICNUM) / $CDFRAMES))" } do_replaygain() @@ -786,7 +796,9 @@ do_tag () if [ -z "$COMMENTOUTPUT" ]; then COMMENTOUTPUT="$(getcddbinfo TRACK-INFO)" fi - CDDBDISCID=$(echo $TRACKINFO | cut -d' ' -f1) + if [ "$CDDBMETHOD" = "cddb" ]; then + CDDBDISCID=$(echo $TRACKINFO | cut -d' ' -f1) + fi run_command '' echo "Tagging track $1 of $TRACKS: $TRACKNAME..." # If we want to start the tracks with a given number, we need to modify the # TRACKNUM value before evaluation @@ -1743,7 +1755,7 @@ do_discid () #vecho "Using builtin cue2discid implementation..." CUESHEET="$(metaflac $METAFLACOPTS --export-cuesheet-to=- "$CDROM")" - #TRACKS=$(echo $CUESHEET | egrep "TRACK \+[[:digit:]]\+ \+AUDIO" |wc -l) + #TRACKS=$(echo $CUESHEET | grep -E "TRACK \+[[:digit:]]\+ \+AUDIO" |wc -l) #TRACKS=0 OFFSETTIMES=( $(echo "$CUESHEET" | sed -n -e's/\ *INDEX 01\ \+//p' ) ) TRACKS=${#OFFSETTIMES[@]} @@ -1775,10 +1787,10 @@ do_discid () # log warning "something went wrong while querying the CD... Maybe a DATA CD?" # fi # -# TRACKS="$(echo "$CDPARANOIAOUTPUT" | egrep '^[[:space:]]+[[:digit:]]' | tail -n 1 | get_first | tr -d "." | tr '\n' ' ')" +# TRACKS="$(echo "$CDPARANOIAOUTPUT" | grep -E '^[[:space:]]+[[:digit:]]' | tail -n 1 | get_first | tr -d "." | tr '\n' ' ')" # CDPARANOIAAUDIOTRACKS="$TRACKS" # -# LEADOUT="$(echo "$CDPARANOIAOUTPUT" | egrep -o '^TOTAL[[:space:]]+([[:digit:]]+)' | get_last)" +# LEADOUT="$(echo "$CDPARANOIAOUTPUT" | grep -Eo '^TOTAL[[:space:]]+([[:digit:]]+)' | get_last)" # OFFSETS="$(echo "$CDPARANOIAOUTPUT" | sed -n -e's/^ .* \([0-9]\+\) \[.*/\1/p')" # makeids # ;; @@ -1834,7 +1846,7 @@ do_discid () if [ ! "$RET" = "0" ];then log warning "something went wrong while querying the CD... Maybe a DATA CD?" fi - TRACKS="$(echo "$CDPARANOIAOUTPUT" | egrep '^[[:space:]]+[[:digit:]]' | tail -n 1 | get_first | tr -d "." | tr '\n' ' ')" + TRACKS="$(echo "$CDPARANOIAOUTPUT" | grep -E '^[[:space:]]+[[:digit:]]' | tail -n 1 | get_first | tr -d "." | tr '\n' ' ')" CDPARANOIAAUDIOTRACKS="$TRACKS" else # Previous versions of abcde would store the tracks on a file, instead of the status record. @@ -1917,7 +1929,7 @@ do_discid () if [ ! -f "$ABCDETEMPDIR/discid" ]; then # Wipe and start fresh echo "abcde: $ABCDETEMPDIR/discid not found. Abcde must remove and recreate" >&2 - echo -n "this directory to continue. Continue? [y/n] (n)" >&2 + echo -n "this directory to continue. Continue [y/N]? " >&2 if [ "$INTERACTIVE" = "y" ]; then read ANSWER else @@ -2148,9 +2160,9 @@ do_localcddb () read CDDBLOCALCHOICE [ x"$CDDBLOCALCHOICE" = "x" ] && CDDBLOCALCHOICE="1" # FIXME # Introduce diff's - if echo $CDDBLOCALCHOICE | egrep "[[:space:]]*[[:digit:]]+,[[:digit:]]+[[:space:]]*" > /dev/null 2>&1 ; then + if echo $CDDBLOCALCHOICE | grep -E "[[:space:]]*[[:digit:]]+,[[:digit:]]+[[:space:]]*" > /dev/null 2>&1 ; then diffentries cddblocalread "$CDDBLOCALCHOICES" "$CDDBLOCALCHOICE" - elif echo $CDDBLOCALCHOICE | egrep "[[:space:]]*[[:digit:]]+[[:space:]]*" > /dev/null 2>&1 ; then + elif echo $CDDBLOCALCHOICE | grep -E "[[:space:]]*[[:digit:]]+[[:space:]]*" > /dev/null 2>&1 ; then # Make sure we get a valid choice CDDBLOCALCHOICENUM=$(echo $CDDBLOCALCHOICE | xargs printf %d 2>/dev/null) if [ $CDDBLOCALCHOICENUM -lt 0 ] || [ $CDDBLOCALCHOICENUM -gt $CDDBLOCALCHOICES ]; then @@ -2182,9 +2194,9 @@ do_localcddb () # List out disc title/author and contents do_cddbparse "${CDDBLOCALFILE}" #if [ "$CDROMREADERSYNTAX" = "flac" ] ; then - # echo -n "Embedded cuesheet entry found, use it? [y/n] (y): " >&2 + # echo -n "Embedded cuesheet entry found, use it [Y/n]? " >&2 #else - echo -n "Locally cached CDDB entry found, use it? [y/n] (y): " >&2 + echo -n "Locally cached CDDB entry found, use it [Y/n]? " >&2 #fi if [ "$INTERACTIVE" = "y" ]; then read USELOCALRESP @@ -2230,7 +2242,8 @@ do_musicbrainz () # the available entries. rm -f "$ABCDETEMPDIR/cddbchoices" CDDBCHOICES=1 # Overridden by multiple matches - ${MUSICBRAINZ} --command data --device "$CDROM" --workdir $ABCDETEMPDIR + MBDISCID=$(echo $TRACKINFO | cut -d' ' -f1) + ${MUSICBRAINZ} --command data --discid "$MBDISCID" --workdir $ABCDETEMPDIR # The helper script will write disc matches out to # cddbread.*. Count how many we have @@ -2521,7 +2534,7 @@ do_cddbedit () echo -n "Which entry would you like abcde to use (0 for none)? [0-$CDDBCHOICES]: " >&2 read CDDBCHOICE [ X"$CDDBCHOICE" = "X" ] && CDDBCHOICE=1 - if echo $CDDBCHOICE | egrep "[[:space:]]*[[:digit:]]+,[[:digit:]]+[[:space:]]*" > /dev/null 2>&1 ; then + if echo $CDDBCHOICE | grep -E "[[:space:]]*[[:digit:]]+,[[:digit:]]+[[:space:]]*" > /dev/null 2>&1 ; then if [ ! X"$DIFF" = "X" ]; then PARSECHOICE1=$(echo $CDDBCHOICE | cut -d"," -f1 | xargs printf %d 2>/dev/null) PARSECHOICE2=$(echo $CDDBCHOICE | cut -d"," -f2 | xargs printf %d 2>/dev/null) @@ -2545,7 +2558,7 @@ do_cddbedit () else echo "The diff program was not found in your path. Please choose a number between 0 and $CDDBCHOICES." >&2 fi - elif echo $CDDBCHOICE | egrep "[[:space:]]*[[:digit:]]+[[:space:]]*" > /dev/null 2>&1 ; then + elif echo $CDDBCHOICE | grep -E "[[:space:]]*[[:digit:]]+[[:space:]]*" > /dev/null 2>&1 ; then # Make sure we get a valid choice CDCHOICENUM=$(echo $CDDBCHOICE | xargs printf %d 2>/dev/null) if [ $CDCHOICENUM -lt 0 ] || [ $CDCHOICENUM -gt $CDDBCHOICES ]; then @@ -2675,11 +2688,11 @@ do_cddbedit () # Some heuristics first. Look at Disc Title, and if it starts with # "Various", then we'll assume Various Artists - if [ "$(grep ^DTITLE= "$CDDBDATA" | cut -f2- -d= | egrep -ci '^(various|soundtrack|varios|sonora|ost)')" != "0" ]; then + if [ "$(grep ^DTITLE= "$CDDBDATA" | cut -f2- -d= | grep -Eci '^(various|soundtrack|varios|sonora|ost)')" != "0" ]; then echo "Looks like a Multi-Artist CD" >&2 VARIOUSARTISTS=y else - echo -n "Is the CD multi-artist? [y/n] (n): " >&2 + echo -n "Is the CD multi-artist [y/N]? " >&2 if [ "$INTERACTIVE" = "y" ]; then read VARIOUSARTISTS else @@ -2691,7 +2704,7 @@ do_cddbedit () # Set a default DEFAULTSTYLE=1 # Need NUMTRACKS before cddb-tool will return it: - NUMTRACKS=$(egrep '^TTITLE[0-9]+=' "$CDDBDATA" | wc -l) + NUMTRACKS=$(grep -E '^TTITLE[0-9]+=' "$CDDBDATA" | wc -l) if [ "$(grep -c "^TTITLE.*\/" "$CDDBDATA")" -gt "$(expr $NUMTRACKS / 2 )" ]; then # More than 1/2 tracks contain a "/", so guess forward DEFAULTSTYLE=1 @@ -2757,7 +2770,7 @@ do_cddbedit () echo "variousartists=$VARIOUSARTISTS" >> "$ABCDETEMPDIR/status" echo "variousartiststyle=$VARIOUSARTISTSTYLE" >> "$ABCDETEMPDIR/status" - if [ "$EDITCDDB" = "y" ] && [ "$UNINTENTIONALLY_ANGER_THE_FREEDB_PEOPLE" = "y" ]; then + if [ "$EDITCDDB" = "y" ] && [ "$CDDBMETHOD" = "cddb" ] && [ "$UNINTENTIONALLY_ANGER_THE_FREEDB_PEOPLE" = "y" ]; then if [ "$CDDBDATAMD5SUM" != "" ] && [ "$CDDBDATAMD5SUM" != "$($MD5SUM "$CDDBDATA" | cut -d " " -f 1)" ]; then # This works but does not have the necessary error checking # yet. If you are familiar with the CDDB spec @@ -2770,7 +2783,7 @@ do_cddbedit () # submit the modified file, if they want if [ "$NOSUBMIT" != "y" ]; then - echo -n "Do you want to submit this entry to $CDDBSUBMIT? [y/n] (n): " + echo -n "Do you want to submit this entry to $CDDBSUBMIT [y/N]? " read YESNO while [ "$YESNO" != "y" ] && [ "$YESNO" != "n" ] && [ "$YESNO" != "Y" ] && \ [ "$YESNO" != "N" ] && [ "$YESNO" != "" ] @@ -3733,7 +3746,7 @@ case "$FLACENCODERSYNTAX" in FLACENCODEROPTS="${FLACENCODEROPTS} --replay-gain" fi # FLAC streams can be encapsulated on a Ogg transport layer - if echo "$FLACENCODEROPTS" | egrep -- "(^| )--ogg($| )" > /dev/null 2>&1 ;then + if echo "$FLACENCODEROPTS" | grep -E -- "(^| )--ogg($| )" > /dev/null 2>&1 ;then log error "FLAC on an Ogg container is not yet supported" log error "due to problem with adding comments to such files" exit 1 @@ -3927,7 +3940,7 @@ fi ## Now that we have metaflac, check if we need cue2discid #case $CDROMREADERSYNTAX in # flac) -# TRACKINFO=$($METAFLAC --show-tag=CDDB $CDROM | cut -d"=" -f2 | egrep "[a-f0-9]{8}") +# TRACKINFO=$($METAFLAC --show-tag=CDDB $CDROM | cut -d"=" -f2 | grep -E "[a-f0-9]{8}") # if [ "$TRACKINFO" = "" ]; then # checkexec ${NEEDCUE2DISCID+$CUE2DISCID} # fi @@ -4344,8 +4357,8 @@ if [ "$KEEPWAVS" = "y" ];then fi # Check if we have moved all the formats we had previously encoded, if we are not using the FORCE. if [ "$DOCLEAN" = "y" ] && [ ! "$FORCE" = "y" ]; then - ENCODED_FORMATS=$(egrep "^encodetrack-(.{3,6})-(.{1,2})$" "$ABCDETEMPDIR/status" | cut -d"-" -f2 | sort -u | tr '\n' '|') - MOVED_FORMATS=$(egrep "^movetrack-output-(.{3,6})$" "$ABCDETEMPDIR/status" | cut -d"-" -f3 | sort -u | tr '\n' '|') + ENCODED_FORMATS=$(grep -E "^encodetrack-(.{3,6})-(.{1,2})$" "$ABCDETEMPDIR/status" | cut -d"-" -f2 | sort -u | tr '\n' '|') + MOVED_FORMATS=$(grep -E "^movetrack-output-(.{3,6})$" "$ABCDETEMPDIR/status" | cut -d"-" -f3 | sort -u | tr '\n' '|') if [ "$ENCODED_FORMATS" != "$MOVED_FORMATS" ]; then log warning "The encoded formats does not match with the moved ones" log warning "Formats encoded: $( echo $ENCODED_FORMATS | tr "|" " " )"