#!/bin/bash
# cdrip.sh : Script pour ripper un cd en ligne de commande
# 
# usage: cdrip.sh 
#
# Licence : GNU GPL
# (c) Sylvain GAUNET 2007
#set -x


# usage : Affiche l'aide 
function usage()
{
	echo "Usage : cdrip [-mp3 | -ogg]"
	echo "      -mp3 : rip in mp3"
	echo "      -ogg : rip in ogg"
}


# Tests des arguments, si nok => usage
while [ $# -ne 0 ]
do
  case "$1" in
    -mp3)
         mp3="ok"
         shift 1;;
    -ogg)
         ogg="ok"
         shift 1;;
    -*)
         usage 
         exit 1;;
    *)
         break;;
  esac
done

# Au moins un argument doit etre saisi !
if [ "$mp3" = "" -a "$ogg" = "" ]
then
  usage
  exit 1
fi

# Initialisation des variables appelant les programmes
cddbcmd="/usr/bin/cddbcmd"          # apt-get install cddb
discidcmd="/usr/bin/cd-discid";     # apt-get install cd-discid
discdev="/dev/cdrom";
cdtowav="/usr/bin/cdparanoia";
cdtowavparams="";
wavtoogg="/usr/bin/oggenc";
wavtooggparams="-b 192";
# Fichier temporaire
tmp=/tmp/tmp.$$


# Test si tous les programmes appelés existent
erreur=0;

if [ ! -x ${discidcmd} ]
then
    echo "${discidcmd} not found !";
    erreur=1;
fi;

if [ ! -x ${cddbcmd} ]
then
    echo "${cddbcmd} not found !";
    erreur=1;
fi;

if [ ! -x ${cdtowav} ]
then
    echo "${cdtowav} not found !";
    erreur=1;
fi;

if [ ! -x ${wavtoogg} ]
then
    echo "${wavtoogg} not found !";
    erreur=1;
fi;

if [ "$erreur" = "1" ]
then
    echo "Please install missing software";
    exit 1;
fi;

# Recupere infos du disque
infostr=$(${cddbcmd} cddb query `${discidcmd} ${discdev}`)
if [ "$?" != "0" ]
then
  echo "Insert disc !"
  exit 1
fi

categ=$(echo $infostr | awk '{ print $1 }');
discid=$(echo $infostr | awk '{ print $2 }')
artist=$(echo $infostr | awk '{ i=3 ;while($i!="/"){  printf($i" "); i++; } }')
album=$(echo $infostr | awk -F"/" '{ print $2 }')
genre=$(echo $infostr | awk '{ print $1 }');

# Ready : Récupere infos de la base cddb
${cddbcmd} cddb read ${categ} ${discid} | grep TTITLE > ${tmp}

mkdir -p "$artist/$album"
cd "$artist/$album"

# On boucle sur les chansons, extraction puis rip
i=1
while read ligne
do
    # Recupere nom du trackname
    trackname=$(echo $ligne | awk -F"=" '{ print $2 }')
    
    #echo "-----------------------"
    #echo "artiste=$artist"
    #echo "genre=$genre"
    #echo "tracknum=$i"
    #echo "title=$trackname"
    #echo "album=$album"
    #echo "-----------------------"
    
    #echo "${trackname} $i";
    
    # Extraction cd => wav
    $cdtowav $cdtowavparams $i "$trackname"
    
    if [ "$ogg" = "ok" ]
    then
      # Rip en ogg
      $wavtoogg $wavtooggparams         \
         --artist "$artist"             \
         --genre "$genre"               \
         --tracknum "$i"                \
         --title "$trackname"           \
         --album "$album"               \
         "$trackname" -o "$i - ${trackname}.ogg"
    fi
    
    if [ "$mp3" = "ok" ]
    then
      # Rip en mp3
      lame "$trackname" "$i - ${trackname}.mp3"
      numgenre=$(id3v2 -L | awk -F': ' -v genre="rock" '{ if(tolower($2)==tolower(genre)) print substr($1,2,length($1)); }')
      # Mise a jour tag
      id3v2 -a "$artist" -A "$album" -g "$numgenre" -T "$i" -t "$trackname" "$i - ${trackname}.mp3"
    fi
    
    # Efface ficheir wav
    \rm "$trackname";
    
    i=$(($i+1));
done < ${tmp}

# Efface fichier temporaire
\rm -f "${tmp}"