echo "-P Use UNIX pipes to read+encode without wav files"
echo "-r <host1[,host2]...>"
echo " Also encode on these remote hosts"
+echo "-R Use local CDDB in recursive mode"
#echo "-R Add replaygain values to the tag info (only for vorbis,flac,mp3)"
echo "-s <field>"
echo " Show dielfs from the CDDB info (year,genre)"
{
if checkstatus cddb-readcomplete && checkstatus cddb-choice >/dev/null; then :; else
- CDDBLOCALSUCCESS="n"
+ CDDBLOCALSTATUS="notfound"
CDDBDISCID=$(echo $TRACKINFO | cut -d' ' -f1)
- CDDBLOCALFILE="${CDDBLOCALDIR}/${CDDBDISCID}"
USELOCALRESP="y"
-
- # If the user has selected to check a local CDDB repo, we proceed with it
- if [ -r "${CDDBLOCALFILE}" ]; then
- # List out disc title/author and contents
- do_cddbparse "${CDDBLOCALFILE}"
- echo -n "Locally cached CDDB entry found, use it? [y/n] (y): "
- if [ "$INTERACTIVE" = "y" ]; then
- read USELOCALRESP
- while [ "$USELOCALRESP" != "y" ] && [ "$USELOCALRESP" != "n" ] && [ "$USELOCALRESP" != "" ] ; do
- echo -n 'Invalid selection. Please answer "y" or "n": '
- read USELOCALRESP
- done
- [ x"$USELOCALRESP" = "x" ] && USELOCALRESP="y"
- else
- echo "y" >&2
- fi
- if [ "$USELOCALRESP" = "y" ]; then
- #echo "Using local copy of CDDB data"
- echo "# DO NOT ERASE THIS LINE! Added by abcde to imitate cddb output" > "$ABCDETEMPDIR/cddbread.1"
- cat "${CDDBLOCALFILE}" >> "$ABCDETEMPDIR/cddbread.1"
- echo 999 > "$ABCDETEMPDIR/cddbquery" # Assuming 999 isn't used by CDDB
- echo cddb-readcomplete >> "$ABCDETEMPDIR/status"
- do_cddbparse "${CDDBLOCALFILE}" > "$ABCDETEMPDIR/cddbchoices"
- echo cddb-choice=1 >> "$ABCDETEMPDIR/status"
- CDDBLOCALSUCCESS="y"
+
+ if [ "$CDDBLOCALRECURSIVE" = "y" ]; then
+ CDDBLOCALRESULTS="$(find ${CDDBLOCALDIR} -name "${CDDBDISCID}" -type f 2> /dev/null)"
+ if [ ! "${CDDBLOCALRESULTS}" = "" ]; then
+ 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
else
- #echo "Not using local copy of CDDB data"
- CDDBLOCALSUCCESS="n"
+ CDDBLOCALMATCH=none
fi
+ elif [ "$CDDBLOCALMATCH" = "none" ] && [ -r "${CDDBLOCALDIR}/${CDDBDISCID}" ]; then
+ CDDBLOCALFILE="${CDDBLOCALDIR}/${CDDBDISCID}"
+ CDDBLOCALMATCH=single
else
- CDDBLOCALSUCCESS="n"
+ CDDBLOCALMATCH=none
fi
+
+ # 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"
+ 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}"
+ {
+ echo -n "#$X: "
+ do_cddbparse "${CDDBLOCALREAD}"
+ echo ""
+ } >> "$ABCDETEMPDIR/cddblocalchoices"
+ done
+ CDDBLOCALCHOICES=$( echo "$CDDBLOCALRESULTS" | wc -l )
+ cat "$ABCDETEMPDIR/cddblocalchoices"
+ 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"
+ done
+ else
+ ### FIXME ###
+ echo "Selected ..."
+ CDDBLOCALRESP=y
+ fi
+ if [ ! "$CDDBLOCALCHOICENUM" = "0" ]; then
+ #echo "Using local copy of CDDB data"
+ echo "# DO NOT ERASE THIS LINE! Added by abcde to imitate cddb output" > "$ABCDETEMPDIR/cddbread.1"
+ cat "$ABCDETEMPDIR/cddblocalread.$CDDBLOCALCHOICENUM" >> "$ABCDETEMPDIR/cddbread.1"
+ echo 999 > "$ABCDETEMPDIR/cddbquery" # Assuming 999 isn't used by CDDB
+ echo cddb-readcomplete >> "$ABCDETEMPDIR/status"
+ do_cddbparse "$ABCDETEMPDIR/cddbread.1" > "$ABCDETEMPDIR/cddbchoices"
+ echo cddb-choice=1 >> "$ABCDETEMPDIR/status"
+ CDDBLOCALSTATUS="found"
+ else
+ #echo "Not using local copy of CDDB data"
+ CDDBLOCALSTATUS="notfound"
+ fi
+ ;;
+ single)
+ # 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
+ else
+ echo -n "Locally cached CDDB entry found, use it? [y/n] (y): " >&2
+ fi
+ if [ "$INTERACTIVE" = "y" ]; then
+ read USELOCALRESP
+ while [ "$USELOCALRESP" != "y" ] && [ "$USELOCALRESP" != "n" ] && [ "$USELOCALRESP" != "" ] ; do
+ echo -n 'Invalid selection. Please answer "y" or "n": ' >&2
+ read USELOCALRESP
+ done
+ [ x"$USELOCALRESP" = "x" ] && USELOCALRESP="y"
+ else
+ echo "y" >&2
+ fi
+ if [ "$USELOCALRESP" = "y" ]; then
+ #echo "Using local copy of CDDB data"
+ echo "# DO NOT ERASE THIS LINE! Added by abcde to imitate cddb output" > "$ABCDETEMPDIR/cddbread.1"
+ cat "${CDDBLOCALFILE}" >> "$ABCDETEMPDIR/cddbread.1"
+ echo 999 > "$ABCDETEMPDIR/cddbquery" # Assuming 999 isn't used by CDDB
+ echo cddb-readcomplete >> "$ABCDETEMPDIR/status"
+ do_cddbparse "${CDDBLOCALFILE}" > "$ABCDETEMPDIR/cddbchoices"
+ echo cddb-choice=1 >> "$ABCDETEMPDIR/status"
+ CDDBLOCALSTATUS="single"
+ else
+ #echo "Not using local copy of CDDB data"
+ CDDBLOCALSTATUS="notfound"
+ fi
+ ;;
+ none)
+ CDDBLOCALSTATUS="notfound"
+ ;;
+ esac
fi
}
if [ "$CDDBAVAIL" = "n" ]; then
ERRORCODE=no_query
echo 503 > "$ABCDETEMPDIR/cddbquery"
- # The default CDDBLOCALSUCCESS is "n"
+ # The default CDDBLOCALSTATUS is "notfound"
# This part will be triggered if the user CDDB repo does not
# contain the entry, or if we are not trying to use the repo.
else
if [ "$INTERACTIVE" = "y" ]; then
# We should show the CDDB results both when we are not using the local CDDB repo
# or when we are using it but we could not find a proper match
- if [ "$CDDBUSELOCAL" = "y" ] && [ ! "$CDDBLOCALSUCCESS" = "y" ] || [ ! "$CDDBUSELOCAL" = "y" ]; then
+ if [ "$CDDBUSELOCAL" = "y" ] && [ "$CDDBLOCALSTATUS" = "notfound" ] || [ ! "$CDDBUSELOCAL" = "y" ]; then
# Display the $ABCDETEMPDIR/cddbchoices file created above
# Pick a pager so that if the tracks overflow the screen the user can still view everything
if [ -r "$ABCDETEMPDIR/cddbchoices" ]; then
CHOICE=$(checkstatus cddb-choice)
if [ -n "$CHOICE" ] ; then
case $CDDBCHOICES in
- -1) log error "CDDB query failed!"
- exit 1
+ -1) if head -1 "$ABCDETEMPDIR/cddbquery" | grep -q "^$" ; then
+ log error "CDDB query failed!"
+ exit 1
+ else
+ cat "$ABCDETEMPDIR/cddbchoices"
+ fi
;;
1) cat "$ABCDETEMPDIR/cddbchoices" ;;
*)
# Show the choice if we are not using the locally stored one
# or when the local search failed to find a match.
PREVIOUSCHOICE=$(checkstatus cddb-choice)
- if [ "$CDDBUSELOCAL" = "y" ] && [ "$CDDBLOCALSUCCESS" = "n" ] || [ ! "$CDDBUSELOCAL" = "y" ]; then
+ if [ "$CDDBUSELOCAL" = "y" ] && [ "$CDDBLOCALSTATUS" = "notfound" ] || [ ! "$CDDBUSELOCAL" = "y" ]; then
#if [ "$PREVIOUSCHOICE" ]; then
cat "$ABCDETEMPDIR/cddbchoices"
#fi
fi
fi
fi
- # Make sure the cache directory exists
- mkdir -p $CDDBLOCALDIR
+ ### FIXME ###
+ # User CDDBLOCALPOLICY to find out if we store the file or not...
# Cache edited CDDB entry in the user's cddb dir
- if [ "$CDDBCOPYLOCAL" = "y" ] || [ "$COPYCDDBLOCAL" = "Y" ]; then
+ if [ "$CDDBCOPYLOCAL" = "y" ]; then
+ # Make sure the cache directory exists
+ mkdir -p $CDDBLOCALDIR
cat "$CDDBDATA" | tail -n $(expr $(cat "$CDDBDATA" | wc -l ) - 1 ) > ${CDDBLOCALDIR}/$(echo "$TRACKINFO" | cut -d' ' -f1)
fi
### FIXME ### use an exception for flac, since it uses -o
### FIXME ### Shall we just use -o $FILEARG ??
flac)
- nice $READNICE $FLAC -d --cue=${READTRACKNUMS:-$UTRACKNUM.1-$(($UTRACKNUM + 1)).0} "$FILEARG" "$CDROM" ;;
+ # Avoid problems wit math expressions by unpadding the given UTRACKNUM
+ 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 ;;
{
if [ x"$EXTRAVERBOSE" != "x" ]; then
case $1 in
- warning) log warning "$@" ;;
+ warning) shift ; log warning "$@" ;;
*) echo "$@" ;;
esac
fi
CDDBPROTO=5
HELLOINFO="$(whoami)@$(hostname)"
CDDBCOPYLOCAL="n"
+CDDBLOCALPOLICY="always"
+CDDBLOCALRECURSIVE="y"
CDDBLOCALDIR="$HOME/.cddb"
CDDBUSELOCAL="n"
# If the user specified a flac file, then switch to special flac mode
if echo $CDROM | grep -i -q '.flac$'; then
- vecho "abcde: switching to flac CDROMREADERSYNTAX..."
+ vecho warning "abcde: switching to flac CDROMREADERSYNTAX..."
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
# If the user provided a DISCID, disable eject
-if [ -n "$DISCID" ]; then EJECTCD=n ; fi
+if [ -n "$DISCID" ] || [ "$CDROMREADERSYNTAX" = "flac" ]; then EJECTCD=n ; fi
# Check the available cd rippers in the system, from the ones we know.
if [ "$CDROMREADERSYNTAX" = "" ]; then
;;
esac
+# which information retrieval tool are we using?
+case "$CDDBTOOL" in
+ cddb) ;;
+ musicbrainz) ;;
+esac
+
# Check if both OGGEOUTPUTCONTAINER and FLACOUTPUTCONTAINER are the same, and differentiante them
if [ X"$OGGOUTPUTCONTAINER" = "Xogg" ] && [ X"$FLACOUTPUTCONTAINER" = "Xogg" ]; then
log error "FLAC on an Ogg container is not yet supported"
export CDDBTOOL ABCDETEMPDIR TRACKQUEUE LOWDISK EJECTCD EJECT EJECTOPTS
export CDROM CDDBDATA REMOTEHOSTS MAXPROCS HTTPGET MD5SUM
-# User-definable function to set some things. Use it for
-# - closing the CD tray with eject -t
-# - set the CD speed value with eject -x
-vecho -n "Executing customizable pre-read function... "
+if [ "$DOREAD" = "y" ]; then
+ # User-definable function to set some things. Use it for
+ # - closing the CD tray with eject -t
+ # - set the CD speed value with eject -x
+ vecho -n "Executing customizable pre-read function... "
-pre_read # Execute the user-defined pre-read funtion. Close the CD with it.
+ pre_read # Execute the user-defined pre-read funtion. Close the CD with it.
-vecho "done."
+ vecho "done."
+fi
case "$CDDBMETHOD" in
cddb)
if checkstatus cddb-choice > /dev/null; then
:
else
- if [ ! "$CDDBLOCALSUCCESS" = "y" ] ; then
+ if [ "$CDDBLOCALSTATUS" = "notfound" ] ; then
case "$CDDBMETHOD" in
cddb)
do_cddbstat