#!/bin/bash
#owl-rip
#jipe-2002
	
IFS=" "
varR=

case $1 in
	$varR)
#		xterm -title "owl-rip-0.7" -geometry 70x32 -exec $0 term &
		rxvt -geometry 70x32 -title "owl-rip-0.7" --inheritPixmap +sb -fg black -e $0 term &
		exit
		;;
	term)
		:
		;;
	*)
		exit
		;;
esac


owls ()
{
clear
echo
echo "     _ _                                                      _ _   " 
echo "    (*.*)                                                    (*.*)  "
echo "    (   )  OWL-RIP-0.7 jipe-2002 jipe@users.sourceforge.net  (   )  " 
echo "     ~ ~                                                      ~ ~   "
echo "   ################################################################ "
echo
echo
}

attente ()
{
att=0
until [ $att == 1 ]
	do
		text=" extraction de la piste $T vers piste$T.$format                           "
		count=0
		while [ $count -lt 70 ]
			do
				count=$((count+1))
				echo -e "\r${text:$count}${text:0:$count}\c"
				case $att in
					0)
						job=$(ps aux | awk '{ print $2}' | grep $!)
						if [ ${#job} == 0 ]; then att=1; fi
						;;				
				esac
			done
	done
echo -e "\b\b\b\bOK" 
}

if [ ! $(which cdparanoia 2>/dev/null) ]
	then
		owls
		echo
		echo " vous devez installer cdparanoia pour pouvoir utiliser owl-rip"
		sleep 5
		exit
fi

if [ ! -f $HOME/.owl-riprc ]
	then
		owls
		echo
		echo " fichier de configuration introuvable. éditez $HOME/.owlriprc"
		sleep 5
		exit
	else
		source $HOME/.owl-riprc
fi

if [ -d $rep ]
	then 
		cd $rep
	else
		owls
		echo
		echo " le répertoire $rep n'existe pas !"
		echo " revoyez la configuration de owl-rip"
		sleep 5
		exit
fi

if cdparanoia -vQ -d$device >/dev/null 2>&1
	then
		while true
			do
				owls
				echo
				echo -n " mode interactif ? [o/N]: "
				read
				case $REPLY in
					$varR|n|non)
						inter=non
						break
						;;
					o|oui)
						inter=oui
						break
						;;
					*)
						:
						;;
				esac
			done
	else
		inter=oui
fi

case $inter in
	oui)

		owls
		echo
		echo -n " sélectionnez un device. [défaut $device] : "
		read
		while true
			do
				case $REPLY in
					$varR)
						break
						;;
					*) 
						if cdparanoia -vQ -d$REPLY >/dev/null 2>&1
							then
								device=$REPLY
								break
							else
								owls
								echo
								echo " pas de cd audio sur le device sélectionné. "
								echo -n " sélectionnez un device. [défaut $device] : "
								read	
						fi
						;;
				esac
			done

		owls
		echo
		echo -n " sélectionnez le format désiré. [défaut $format] : "
		read
		while true
			do
				case $REPLY in
					$varR)
						break
						;;
					wav)
						format=wav
						break
						;;
					mp3)
						if [ $(which lame 2>/dev/null) ]
							then
								format=mp3
								break
							else
								owls
								echo
								echo " lame introuvable. format mp3 indisponible. "
								echo -n " sélectionnez le format désiré. [défaut $format] : "
								read
						fi
						;;
					ogg)
						if [ $(which oggenc 2>/dev/null) ]
							then
								format=ogg
								break
							else
								owls
								echo
								echo " oggenc introuvable. format ogg indisponible. "
								echo -n " sélectionnez le format désiré. [défaut $format] : "
								read
						fi
						;;
					*)
						owls
						echo
						echo " formats possibles: ogg mp3 ou wav. "
						echo -n " sélectionnez le format désiré. [défaut $format] : "
						read
						;;
				esac
			done

		owls
		echo
		echo -n " sélectionnez la qualité d'extraction. [défaut $qext] : "
		read
		while true
			do	
				case $REPLY in
					$varR)
						break
						;;
					[012])
						qext=$REPLY
						break
						;;
					*)
						owls
						echo
						echo " réponses possibles: 0 1 2. "
						echo -n " sélectionnez la qualité d'extraction. [défaut $qext] : "
						read
						;;
				esac
			done
		
		case $format in
			mp3)
				owls
				echo
				echo -n " sélectionnez le bitrate. [défaut $BMP3] : "			
				read
				while true
					do
						case $REPLY in
							$varR)
								break
								;;
							128|192|256|320)
								BMP3=$REPLY
								break
								;;
							*)
								owls
								echo
								echo " réponses possibles: 128 192 256 320. "
								echo -n " sélectionnez le bitrate. [défaut $BMP3] : "
								read
								;;
						esac
					done
				owls
				echo
				echo -n " sélectionnez la qualité d'encodage. [défaut $QMP3] : "			
				read
				while true
					do
						case $REPLY in
							$varR)
								break
								;;
							[0-9])
								QMP3=$REPLY
								break
								;;
							*)
								owls
								echo
								echo " réponses possibles: 0 1 2 3 4 5 6 7 8 9. "
								echo -n " sélectionnez la qualité d'encodage. [défaut $QMP3] : "
								read
								;;
						esac
					done
				owls
				echo
				echo -n " sélectionnez le mode d'encodage. [défaut $MMP3] : "			
				read
				while true
					do
						case $REPLY in
							$varR)
								break
								;;
							[jms])
								MMP3=$REPLY
								break
								;;
							*)
								owls
								echo
								echo " réponses possibles: m s ou j. "
								echo -n " sélectionnez le mode d'encodage. [défaut $MMP3] : "
								read
								;;
						esac
					done
				;;
			ogg)
				owls
				echo
				echo -n " sélectionnez la qualité d'encodage. [défaut $QOGG] : "			
				read
				while true
					do
						case $REPLY in
							$varR)
								break
								;;
							[0-9]|10)
								QOGG=$REPLY
								break
								;;
							*)
								owls
								echo
								echo " réponses possibles: 0 1 2 3 4 5 6 7 8 9 10. "
								echo -n " sélectionnez la qualité d'encodage. [défaut $QOGG] : "
								read
								;;
						esac
					done
				;;
		esac

		num=$(cdparanoia -vQ 2>&1 | awk '{ print $1}' | grep ^[1-9] | wc -l)
		owls
		echo " les pistes suivantes sont présentes sur le cd:"
		cdparanoia -vQ -d$device 2>&1 | tail -$((num + 4)) | head -n $((num + 3))
		echo
		echo " (séparer les pistes par un espace ou taper all pour le cd entier)"
		echo -n " pistes à extraires: "
		read
		pistes="$REPLY"
		;;
	non)
		num=$(cdparanoia -vQ 2>&1 | awk '{ print $1}' | grep ^[1-9] | wc -l)
		;;

esac

case $qext in
	0)
		qext=
		;;
	1)
		qext=-Y
		;;
	2)
		qext="-Y -Z"
		;;
esac

case $pistes in
	all)
		a=0
		pistes=
      while [ $a -lt $num ]
			do
				a=$((a+1))
            pistes="$pistes $a"
			done
		;;
esac

case $format in

	wav)
		owls
		echo
		for wav in $pistes
			do
				T=$wav
				while [ ${#T} != 2 ]
					do
						T=0$T
					done
#				echo " extraction de la piste $T vers piste$T.wav"
            cdparanoia -d$device $qext -w $wav piste$T.wav 2>/dev/null &
				attente
			done
		;;

   ogg)
		owls
		echo
		for ogg in $pistes
			do
            T=$ogg
				while [ ${#T} != 2 ]
					do
						T=0$T
					done
#				echo " extraction de la piste $T vers piste$T.ogg"
            cdparanoia -d$device $qext -w $ogg - 2>/dev/null | oggenc -q $QOGG -o piste$T.ogg - >/dev/null 2>&1 &
				attente
			done
		;;

   mp3)
		owls
		echo
      for mp3 in $pistes
         do
            T=$mp3
            while [ ${#T} != 2 ]
               do
                  T=0$T
               done
#				echo " extraction de la piste $T vers piste$T.mp3" 
            cdparanoia -d$device -w "$mp3" - 2>/dev/null | lame -b $BMP3 -q $QMP3 --resample 44.1 -m $MMP3 - piste$T.mp3 >/dev/null 2>&1 &
				attente
         done
      ;;

esac

renm=0
while [ $renm != 1 ]
	do
		owls
		echo " renommer les pistes ?

					1 - oui
					2 - non"
		echo
		echo -n " votre choix: "
		read
		case $REPLY in
			1|oui)
				IFS=$(echo -e "\n\r\t")
				CTa=0
				CTb=0
				owls
				echo -n " artiste: "
				read 'ARTIST'
				echo -n " album: "
				read 'ALBUM'
				echo
				for file in piste??.$format			
					do
						echo -n " titre pour $file: "
						read 'TITLE'
						CTa=$(basename ${file} .$format)
						CTb=${CTa:5}
						mv $file "$ARTIST-$ALBUM-$CTb-$TITLE.$format"
					done
				renm=1
				;;
			2|non)
				renm=1
				;;
			*)
				renm=0
				;;
		esac
	done

owls
echo
echo " les pistes suivantes ont été extraites:"
echo
for file in $(ls -1 *.$format); do echo " $file"; done
echo
echo " Merci d'avoir utilisé owl-rip et à bientôt."
echo
sleep 5
