#!/bin/bash
# Convert all mp3 files in current dir to ogg using "mp3toogg"

### Script begins here ###

if [ -e /etc/mp32ogg.conf ]; then
	source /etc/mp32ogg.conf
else
	echo "FATAL: Cannot find configuration file /etc/mp32ogg.conf"
	exit 1
fi
	
convert (){
	file="$i"
	if echo "$file" | grep \.[Mm][Pp]3 > /dev/null; then 
		echo -e "\e[38m$MP32OGG_SCRIPT: Decoding $file\e[0m"
		lame --quiet --decode "$file"

		echo -e "\e[38m$MP32OGG_SCRIPT: Encoding $file\e[0m"
		oggenc -Q -q$MP32OGG_QUALITY "$file.wav" 

		destination="`basename "$file" .mp3`.ogg"
		echo -e "\e[38m$MP32OGG_SCRIPT: Moving $file to $destination\e[0m"
		mv "$file.ogg" "$destination"

		echo -e "\e[38m$MP32OGG_SCRIPT: Transferring ID3 tags to VORBIS comments\e[0m"
		TITLE=`id3info "$file"| grep "=== TIT2" | sed 's/^=== [^:]*: \(.*\)$/\1/g'`
		ARTIST=`id3info "$file"| grep "=== TPE1" | sed 's/^=== [^:]*: \(.*\)$/\1/g'`
		ALBUM=`id3info "$file"| grep "=== TALB" | sed 's/^=== [^:]*: \(.*\)$/\1/g'`
		YEAR=`id3info "$file"| grep "=== TYER" | sed 's/^=== [^:]*: \(.*\)$/\1/g'`
		TRACK=`id3info "$file"| grep "=== TRCK" | sed 's/^=== [^:]*: \(.*\)$/\1/g'`
		CONTENTTYPE=`id3info "$file"| grep "=== TCON" | sed 's/^=== [^:]*: \(.*\)$/\1/g'`

		ID3V1GENRE=`echo "$CONTENTTYPE" | sed 's/^(\([0-9]*\))$/\1/g'`
		if [[ "$ID3V1GENRE" != "$CONTENTTYPE" ]]; then
			GENRE=`lame --genre-list | grep "^ *$ID3V1GENRE " | sed 's/^ [0-9]* \(.*\)$/\1/g'`
		else
			GENRE=$CONTENTTYPE
		fi

		touch "$file.tags"
		echo "TITLE=$TITLE" >> "$file.tags"
		echo "ARTIST=$ARTIST" >> "$file.tags"
		echo "ALBUM=$ALBUM" >> "$file.tags"
		echo "DATE=$YEAR" >> "$file.tags"
		echo "TRACKNUMBER=$TRACK" >> "$file.tags"
		echo "GENRE=$GENRE" >> "$file.tags"

		vorbiscomment -w -c "$file.tags" "$destination"
		rm "$file.tags"

		echo -e "\e[38m$MP32OGG_SCRIPT: Removing WAV file\e[0m"
		rm "$file.wav"
		if [ $MP32OGG_REMOVE_MP3 = 1 ]; then
			echo -e "\e[38m$MP32OGG_SCRIPT: Removing $file\e[0m"
			rm "$file"
		fi	
	fi

	if [ -d "$file" ]; then
		echo -e "\e[38m$MP32OGG_SCRIPT: Entering directory: $file\e[0m"
		cd "$file"

		if [ "$MP32OGG_PARALLELIZE" = "1" ]; then
			$MP32OGG_SCRIPT &
		else
			$MP32OGG_SCRIPT
		fi

		echo -e "\e[38m$MP32OGG_SCRIPT: Entering directory: ..\e[0m"
		cd ..
	fi	
}

for i in *; do
	if [ "$MP32OGG_PARALLELIZE" = "1" ]; then
		convert &
	else
		convert
	fi
done

exit 0	
