X-Git-Url: https://git.hcoop.net/clinton/abcde.git/blobdiff_plain/69d2aa45da196c5c30e8aac54906ab34f7666839..f37b07d0726802b2c026c2bd40bf54b60c26a693:/abcde diff --git a/abcde b/abcde index b0a0e5c..5b9847a 100755 --- a/abcde +++ b/abcde @@ -334,6 +334,21 @@ relpath () echo $TO } +checkexec () +{ + if [ ! "$@" = "" ]; then + # Cut off the command-line options we just added in + X=$(echo $@ | cut -d' ' -f2) + if [ "$(which $X)" = "" ]; then + log error "$X is not in your path." >&2 + exit 1 + elif [ ! -x $(which $X) ]; then + log error "$X is not executable." >&2 + exit 1 + fi + fi +} + # do_getcddbinfo # Finds an specific field from cddbinfo do_getcddbinfo() @@ -726,7 +741,7 @@ do_tag () *) echo COMMENT="$COMMENTOUTPUT";; esac fi - ) | run_command tagtrack-$OUTPUT-$1 $METAFLAC $METAFLACOPTS --import-tags-from=- "$ABCDETEMPDIR/track$1.$FLACOUTPUTCONTAINER" + ) | run_command tagtrack-$OUTPUT-$1 $METAFLAC $METAFLACOPTS ${IMPORTCUESHEET:+--import-cuesheet-from="$ABCDETEMPDIR/$CUEFILE"} --import-tags-from=- "$ABCDETEMPDIR/track$1.$FLACOUTPUTCONTAINER" ;; spx) run_command tagtrack-$OUTPUT-$1 true @@ -1349,7 +1364,12 @@ do_discid () disktool -u ${CDROM#/dev/} fi if [ "$CDROMREADERSYNTAX" = "flac" ] ; then - TRACKINFO=$($METAFLAC $METAFLACOPTS --export-cuesheet-to=- $CDROM | $CUE2DISCID) + if $METAFLAC $METAFLACOPTS --export-cuesheet-to=- $CDROM > /dev/null 2>&1 ; then + TRACKINFO=$($METAFLAC $METAFLACOPTS --export-cuesheet-to=- $CDROM | $CUE2DISCID) + else + log error "the input flac file does not contain a cuesheet." + exit 1 + fi else case "$CDDBMETHOD" in cddb) TRACKINFO=$($CDDISCID $CDROM) ;; @@ -1532,13 +1552,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 @@ -1632,8 +1661,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 @@ -1650,13 +1677,13 @@ 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}" @@ -1695,7 +1722,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 @@ -2252,12 +2279,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 @@ -2304,7 +2331,6 @@ do_cdread () STRIPTRACKNUM=$(expr $UTRACKNUM + 0) nice $READNICE $FLAC -d -f --cue=${READTRACKNUMS:-$STRIPTRACKNUM.1-$(($STRIPTRACKNUM + 1)).0} "$FILEARG" "$CDROM" ;; cdparanoia) - echo "nice $READNICE $CDROMREADER -$CDPARANOIACDROMBUS $CDROM ${READTRACKNUMS:-$UTRACKNUM} "$FILEARG" $REDIR ;;" > /tmp/log nice $READNICE $CDROMREADER -$CDPARANOIACDROMBUS $CDROM ${READTRACKNUMS:-$UTRACKNUM} "$FILEARG" $REDIR ;; cdda2wav) if [ "$OSFLAVOUR" = "OSX" ] ; then @@ -2361,9 +2387,9 @@ do_cdread () echo readencodetrack-$UTRACKNUM >> "$ABCDETEMPDIR/status" else echo readtrack-$UTRACKNUM >> "$ABCDETEMPDIR/status" - if [ "$1" = "onetrack" ]; then - echo onetrack >> "$ABCDETEMPDIR/status" - fi + fi + if [ "$1" = "onetrack" ]; then + echo onetrack >> "$ABCDETEMPDIR/status" fi fi } @@ -2743,10 +2769,8 @@ if echo $CDROM | grep -i -q '.flac$'; then CDROMREADERSYNTAX=flac # Added a need on CUE2DISCID until we manage to convert the python script to bash. NEEDCUE2DISCID=y - if [ "$EJECTCD" = "y" ];then - vecho "abcde: CDROM flac mode, deactivating EJECTCD..." - EJECTCD=n - fi + NEEDMETAFLAC=y + EJECTCD=n fi # If the user provided a DISCID, disable eject @@ -3192,11 +3216,11 @@ if [ "$MAKECUEFILE" = "y" ]; then NEEDCUEREADER=y fi -if [ X"$CDSPEEDVALUE" != "X" ]; then +if [ X"$CDSPEEDVALUE" != "X" ] && [ "$DOREAD" = "y"]; then case "$CDROMREADERSYNTAX" in cdparanoia|debug) CDROMREADEROPTS="$CDPARANOIAOPTS -S $CDSPEEDVALUE" ;; ### FIXME ### translate "cue2discid" from python to bash - flac) NEEDMETAFLAC=y ; NEEDCUE2DISCID=y ;; + flac) NEEDMETAFLAC=y ; NEEDCUE2DISCID=y ; CDSPEEDVALUE="" ;; *) NEEDCDSPEED=y ;; esac fi @@ -3258,33 +3282,35 @@ for X in $CDROMREADER $CDDISCID ${NEEDTAGGER+$TAGGER} $MP3ENCODER \ ${NEEDNORMALIZER+$NORMALIZER} ${NEEDEJECT+$EJECT} \ ${NEEDDISKTOOL+disktool} ${NEEDCDSPEED+$CDSPEED} \ ${NEEDVORBISGAIN+$VORBISGAIN} ${NEEDMP3GAIN+$MP3GAIN} \ - ${NEEDMPPGAIN+$MPPGAIN} \ - ${NEEDCUEREADER+$CUEREADER} ${NEEDCUE2DISCID+$CUE2DISCID} + ${NEEDMPPGAIN+$MPPGAIN} ${NEEDCUEREADER+$CUEREADER} \ + ${NEEDCUE2DISCID+$CUE2DISCID} do - # Cut off the command-line options we just added in - X=$(echo $X | cut -d' ' -f2) - if [ "$(which $X)" = "" ]; then - log error "$X is not in your path." >&2 - exit 1 - elif [ ! -x $(which $X) ]; then - log error "$X is not executable." >&2 - exit 1 - fi + checkexec "$X" done -CDROMREADER="$CDROMREADER $CDROMREADEROPTS" -CDDBTOOL="$CDDBTOOL $CDDBTOOLOPTS" -HTTPGET="$HTTPGET $HTTPGETOPTS" - # And last but not least, check if we can diff between files if [ -x $(which $DIFF) ]; then :; else vecho warning "Disabling diff since we cannot find it in the \$PATH..." 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 + +CDROMREADER="$CDROMREADER $CDROMREADEROPTS" +CDDBTOOL="$CDDBTOOL $CDDBTOOLOPTS" +HTTPGET="$HTTPGET $HTTPGETOPTS" + # Here it used to say: # One thousand lines in, we can start doing stuff with things -# Well, right now we are at line 2736 ;) +# Well, right now we are at line 3306 ;) # Export needed things so they can be read in this subshell export CDDBTOOL ABCDETEMPDIR TRACKQUEUE LOWDISK EJECTCD EJECT EJECTOPTS @@ -3311,6 +3337,8 @@ case "$CDDBMETHOD" in esac if [ "$DOCDDB" = "y" ]; then + # start with a sane default: + CDDBLOCALSTATUS=notfound if [ $CDDBUSELOCAL = "y" ]; then do_localcddb fi @@ -3355,11 +3383,20 @@ if [ -f "$ABCDETEMPDIR/status" ] && [ X"$ERASEENCODEDSTATUS" = "Xy" ]; then | grep -v ^encode-output > "$ABCDETEMPDIR/status" fi +if checkstatus onetrack ; then ONETRACK=y ; fi + +if [ "$ONETRACK" = "y" ]; then + # Reuse the CUEFILE in case we created it in a previous run + if CUEFILE=$(checkstatus cuefile); then + IMPORTCUESHEET=y + fi +fi + # Create playlist if needed (backgroundable) and start reading in tracks ( -if [ ! "$ONETRACK" = "y" ]; then +if [ "$ONETRACK" = "y" ]; then if [ "$DOPLAYLIST" = "y" ]; then echo Creating playlist... >&2 do_playlist @@ -3374,10 +3411,12 @@ fi if [ "$ONETRACK" = "y" ]; then TRACKS="$FIRSTTRACK" - if checkstatus readtrack-$FIRSTTRACK; then :; else - if [ "$USEPIPES" = "y" ]; then + if [ "$USEPIPES" = "y" ]; then + if checkstatus readencodetrack-$FIRSTTRACK; then :; else do_cdread onetrack $FIRSTTRACK $LASTTRACK | do_encode $FIRSTTRACK %local0% > /dev/null 2>&1 - else + fi + else + if checkstatus readtrack-$FIRSTTRACK; then :; else do_cdread onetrack $FIRSTTRACK $LASTTRACK fi fi