X-Git-Url: https://git.hcoop.net/clinton/abcde.git/blobdiff_plain/e9b4a89a230c56f3ee26fd4f0820c170eb1229b9..3b4d8f9b5214afc50dad321b2393348c8d382d7f:/abcde diff --git a/abcde b/abcde index 6ee7d3b..27779b1 100755 --- a/abcde +++ b/abcde @@ -349,6 +349,39 @@ checkexec () fi } +# diffentries , +diffentries () +{ + FILENAME=$1 + shift + local CDDBDIFFCHOICES=$1 + shift + local CDDBDIFFCHOICE="$@" + if [ ! X"$DIFF" = "X" ]; then + PARSECHOICE1=$(echo $CDDBDIFFCHOICE | cut -d"," -f1 | xargs printf %d 2>/dev/null) + PARSECHOICE2=$(echo $CDDBDIFFCHOICE | cut -d"," -f2 | xargs printf %d 2>/dev/null) + 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 + else + # We parse the 2 choices to diff, store them in temporary files and diff them. + for PARSECHOICE in $(echo $CDDBDIFFCHOICE | tr , \ ); do + do_cddbparse "$ABCDETEMPDIR/$FILENAME.$PARSECHOICE" > "$ABCDETEMPDIR/$FILENAME.parsechoice.$PARSECHOICE" + done + echo "Showing diff between choices $PARSECHOICE1 and $PARSECHOICE2..." > "$ABCDETEMPDIR/$FILENAME.diff" + $DIFF $DIFFOPTS "$ABCDETEMPDIR/$FILENAME.parsechoice.$PARSECHOICE1" "$ABCDETEMPDIR/$FILENAME.parsechoice.$PARSECHOICE2" >> "$ABCDETEMPDIR/$FILENAME.diff" + if [ $(cat "$ABCDETEMPDIR/$FILENAME.diff" | wc -l) -ge 24 ]; then + page "$ABCDETEMPDIR/$FILENAME.diff" + else + cat "$ABCDETEMPDIR/$FILENAME.diff" >&2 + fi + fi + else + echo "The diff program was not found in your path. Please choose a number between 0 and $CDDBDIFFCHOICES." >&2 + fi +} + # do_getcddbinfo # Finds an specific field from cddbinfo do_getcddbinfo() @@ -380,15 +413,18 @@ do_replaygain() { if checkstatus replaygain; then :; else run_command "" echo "Adding replygain information..." - for OUTPUT in $( echo $OUTPUTTYPE | tr , \ ) + for TMPOUTPUT in $( echo $OUTPUTTYPE | tr , \ ) do - case $OUTPUT in + case $TMPOUTPUT in vorbis|ogg) OUTPUT=$OGGOUTPUTCONTAINER ;; flac) OUTPUT=$FLACOUTPUTCONTAINER ;; + *) + OUTPUT=$TMPOUTPUT + ;; esac OUTPUTFILES="" REPLAYINDEX=0 @@ -861,9 +897,9 @@ do_encode () fi # We need IN to proceed, if we are not using pipes. if [ -s "$IN" -o X"$USEPIPES" = "Xy" ] ; then - for OUTPUT in $(echo $OUTPUTTYPE | tr , \ ) + for TMPOUTPUT in $(echo $OUTPUTTYPE | tr , \ ) do - case "$OUTPUT" in + case "$TMPOUTPUT" in vorbis|ogg) OUT="$ABCDETEMPDIR/track$1.$OGGOUTPUTCONTAINER" OUTPUT=$OGGOUTPUTCONTAINER @@ -874,6 +910,7 @@ do_encode () ;; *) OUT="$ABCDETEMPDIR/track$1.$OUTPUT" + OUTPUT=$TMPOUTPUT ;; esac if [ "$NOGAP" = "y" ] && checkstatus encodetrack-$OUTPUT-$1 ; then @@ -1259,15 +1296,18 @@ do_move () # VARIOUSARTISTS, OUTPUTDIR do_playlist () { - for OUTPUT in $(echo $OUTPUTTYPE | tr , \ ) + for TMPOUTPUT in $(echo $OUTPUTTYPE | tr , \ ) do - case $OUTPUT in + case $TMPOUTPUT in vorbis|ogg) OUTPUT=$OGGOUTPUTCONTAINER ;; flac) OUTPUT=$FLACOUTPUTCONTAINER ;; + *) + OUTPUT=$TMPOUTPUT + ;; esac # Create a playlist file for the playlist data to go into. # We used to wipe it out if it existed. Now we request permision if interactive. @@ -1364,13 +1404,11 @@ do_discid () disktool -u ${CDROM#/dev/} fi if [ "$CDROMREADERSYNTAX" = "flac" ] ; then - if [ "$TRACKINFO" = "" ]; then + if $METAFLAC $METAFLACOPTS --export-cuesheet-to=- $CDROM > /dev/null 2>&1 ; then TRACKINFO=$($METAFLAC $METAFLACOPTS --export-cuesheet-to=- $CDROM | $CUE2DISCID) else - if $METAFLAC $METAFLACOPTS --export-cuesheet-to=- $CDROM > /dev/null 2>&1 ; then :; else - log error "the input flac file does not contain a cuesheet." - exit 1 - fi + log error "the input flac file does not contain a cuesheet." + exit 1 fi else case "$CDDBMETHOD" in @@ -1554,13 +1592,22 @@ do_discid () if checkstatus cuefile > /dev/null 2>&1 ; then :; else CUEFILE=cue-$(echo "$TRACKINFO" | cut -f1 -d' ').txt vecho "Creating cue file..." - if $CUEREADER $CUEREADEROPTS > "$ABCDETEMPDIR/$CUEFILE"; then - echo cuefile=$CUEFILE >> "$ABCDETEMPDIR/status" - else - log warning "reading the CUE sheet with mkcue is still considered experimental" - log warning "and there was a problem with the CD reading. abcde will continue," - log warning "but consider reporting the problem to the abcde author" - fi + case $CDROMREADERSYNTAX in + flac) + if $METAFLAC --export-cuesheet-to=- $CDROM > "$ABCDETEMPDIR/$CUEFILE"; then :; else + log warning "the input flac file does not contain a cuesheet." + fi + ;; + *) + if $CUEREADER $CUEREADEROPTS > "$ABCDETEMPDIR/$CUEFILE"; then + echo cuefile=$CUEFILE >> "$ABCDETEMPDIR/status" + else + log warning "reading the CUE sheet with mkcue is still considered experimental" + log warning "and there was a problem with the CD reading. abcde will continue," + log warning "but consider reporting the problem to the abcde author" + fi + ;; + esac fi fi # If we got the CDPARANOIA status and it is not recorded, save it now @@ -1654,8 +1701,6 @@ do_localcddb () if (( $(echo "${CDDBLOCALRESULTS}" | wc -l) == 1 )); then CDDBLOCALFILE="${CDDBLOCALRESULTS}" CDDBLOCALMATCH=single - echo "${CDDBLOCALRESULTS}" : $(echo "${CDDBLOCALRESULTS}" | wc -l ) - echo CDDBLOCALMATCH=single elif (( $(echo "${CDDBLOCALRESULTS}" | wc -l) > 1 )); then CDDBLOCALMATCH=multiple fi @@ -1672,27 +1717,43 @@ do_localcddb () # If the user has selected to check a local CDDB repo, we proceed with it case $CDDBLOCALMATCH in multiple) - echo "Processing multiple matching CDDB entries..." >> "$ABCDETEMPDIR/cddblocalchoices" + echo "Processing multiple matching CDDB entries..." > "$ABCDETEMPDIR/cddblocalchoices" X=0 echo "$CDDBLOCALRESULTS" | while read RESULT ; do X=$(expr $X + 1) # List out disc title/author and contents CDDBLOCALREAD="$ABCDETEMPDIR/cddblocalread.$X" - cat "$RESULT" >> "${CDDBLOCALREAD}" + cat "$RESULT" > "${CDDBLOCALREAD}" { echo -n "#$X: " do_cddbparse "${CDDBLOCALREAD}" echo "" } >> "$ABCDETEMPDIR/cddblocalchoices" done + if [ $(cat "$ABCDETEMPDIR/cddblocalchoices" | wc -l) -ge 24 ]; then + page "$ABCDETEMPDIR/cddblocalchoices" + else + # It's all going to fit in one page, cat it + cat "$ABCDETEMPDIR/cddblocalchoices" >&2 + fi CDDBLOCALCHOICES=$( echo "$CDDBLOCALRESULTS" | wc -l ) - cat "$ABCDETEMPDIR/cddblocalchoices" + # Setting the choice to an impossible integer to avoid errors in the numeric comparisons CDDBLOCALCHOICENUM=-1 if [ "$INTERACTIVE" = "y" ]; then while [ $CDDBLOCALCHOICENUM -lt 0 ] || [ $CDDBLOCALCHOICENUM -gt $CDDBLOCALCHOICES ]; do echo -n "Locally cached CDDB entries found. Which one would you like to use (0 for none)? [0-$CDDBLOCALCHOICES]: " >&2 - read CDDBLOCALCHOICENUM - [ x"$CDDBLOCALCHOICENUM" = "x" ] && CDDBLOCALCHOICENUM="1" + read CDDBLOCALCHOICE + [ x"$CDDBLOCALCHOICE" = "x" ] && CDDBLOCALCHOICE="1" + # FIXME # Introduce diff's + if echo $CDDBLOCALCHOICE | egrep -q "[[:space:]]*[[:digit:]]+,[[:digit:]]+[[:space:]]*" ; then + diffentries cddblocalread "$CDDBLOCALCHOICES" "$CDDBLOCALCHOICE" + elif echo $CDDBLOCALCHOICE | egrep -q "[[:space:]]*[[:digit:]]+[[:space:]]*" ; 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 + echo "Invalid selection. Please choose a number between 0 and $CDDBLOCALCHOICES." >&2 + fi + fi done else ### FIXME ### @@ -1717,7 +1778,7 @@ do_localcddb () # List out disc title/author and contents do_cddbparse "${CDDBLOCALFILE}" if [ "$CDROMREADERSYNTAX" = "flac" ] ; then - echo -n "Embedded cuesheet entry found, use ut? [y/n] (y): " >&2 + echo -n "Embedded cuesheet entry found, use it? [y/n] (y): " >&2 else echo -n "Locally cached CDDB entry found, use it? [y/n] (y): " >&2 fi @@ -2274,12 +2335,12 @@ do_cdread () # the user said # We need the first and last track for cdda2wav FIRSTTRACK=$2 - LASTTRACK=$3 + LASTTRACK=$(expr $3 + 0) UTRACKNUM=$FIRSTTRACK case "$CDROMREADERSYNTAX" in flac) READTRACKNUMS="$FIRSTTRACK.1-$(($LASTTRACK + 1)).0" ;; cdparanoia) READTRACKNUMS="$FIRSTTRACK-$LASTTRACK" ;; - cdda2wav) READTRACKNUMS="$FIRSTTRACK+$LASTRACK" ;; + cdda2wav) READTRACKNUMS="$FIRSTTRACK+$LASTTRACK" ;; *) echo "abcde error: $CDROMREADERSYNTAX does not support ONETRACK mode" exit 1 ;; esac @@ -3277,8 +3338,8 @@ for X in $CDROMREADER $CDDISCID ${NEEDTAGGER+$TAGGER} $MP3ENCODER \ ${NEEDNORMALIZER+$NORMALIZER} ${NEEDEJECT+$EJECT} \ ${NEEDDISKTOOL+disktool} ${NEEDCDSPEED+$CDSPEED} \ ${NEEDVORBISGAIN+$VORBISGAIN} ${NEEDMP3GAIN+$MP3GAIN} \ - ${NEEDMPPGAIN+$MPPGAIN} \ - ${NEEDCUEREADER+$CUEREADER} + ${NEEDMPPGAIN+$MPPGAIN} ${NEEDCUEREADER+$CUEREADER} \ + ${NEEDCUE2DISCID+$CUE2DISCID} do checkexec "$X" done @@ -3289,15 +3350,15 @@ if [ -x $(which $DIFF) ]; then :; else DIFF="" 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}") - if [ "$TRACKINFO" = "" ]; then - checkexec ${NEEDCUE2DISCID+$CUE2DISCID} - fi - ;; -esac +## 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}") +# if [ "$TRACKINFO" = "" ]; then +# checkexec ${NEEDCUE2DISCID+$CUE2DISCID} +# fi +# ;; +#esac CDROMREADER="$CDROMREADER $CDROMREADEROPTS" CDDBTOOL="$CDDBTOOL $CDDBTOOLOPTS" @@ -3332,6 +3393,8 @@ case "$CDDBMETHOD" in esac if [ "$DOCDDB" = "y" ]; then + # start with a sane default: + CDDBLOCALSTATUS=notfound if [ $CDDBUSELOCAL = "y" ]; then do_localcddb fi @@ -3389,7 +3452,7 @@ fi ( -if [ "$ONETRACK" = "y" ]; then +if [ ! "$ONETRACK" = "y" ]; then if [ "$DOPLAYLIST" = "y" ]; then echo Creating playlist... >&2 do_playlist