#!/bin/bash

version="0.2"

# changes :
# 0.1.1 : get all titles before encoding anything
# 0.1.2 : getopts
#         now rips before encoding
#         CMD line options do everything
# 0.2	: version bump

function help {
    echo -e "$0 [OPTIONS]
$0 $version

options may be :
                -s <directory> : the directory where wave files should be 
                                 (default: .)
                -d <directory> : the directory where ogg file should be 
                                 (default: .) 
                                 files will be 
           <directory>/<genre>/<artist>/<album>/<artist>--<track#>-<title>.ogg
                -q <quality> (default: 4)
                -R : remove wav files after encoding
                -t <filename> : add file to this tar archive. If it doesn't 
                                exist it'll be created
                -r <ripper>   : use specified ripper (default: cdparanoia)
                -A <options>  : append options to the ripper (default: -B)

Example :
        $0 -s /home/Media/zzz-ripping -d /home/Media/musik -r cdparanoia -q4 -R -A '-z -B'
    will rip using cdparanoia with the options '-z -B' in 
    /home/Media/zzz-ripping/, then encode to /home/Media/musik/ in quality 4, 
    then remove files in /home/Media/zzz-ripping"
    exit
}

while getopts "A:d:hq:r:Rs:t:-:" opt ; do
    case $opt in
        "A") ripopts=$OPTARG ;;
        "d") dest_dir=$OPTARG ;;
        "h") help ;;
        "q") quality=$OPTARG ;;
        "r") ripper=$OPTARG ;;
        "R") remove=1 ;;
        "s") orig_dir=$OPTARG ;;
        "t") tar=1 ; tar_name=$OPTARG ;;
    esac
done

echo "oggize.sh $version"
echo
echo "$0 -A '${ripopts:=-B}' -d '${dest_dir:=$(pwd)}' -q '${quality:=4}' -r '${ripper:=cdparanoia}' -s '${orig_dir:=$(pwd)}'"
echo

function rip {
    if [ ! -d $orig_dir ] ; then
        mkdir $orig_dir || echo "$orig_dir doesn't exist and couldn't be created";
    fi
    cd $orig_dir

    $ripper $ripopts
}

function encode {
    for file in $(ls "$orig_dir/" | grep .wav$) ; do

#       set +x
#       file=$track${count}
        artist="$(grep ARTIST= "$orig_dir/${file%.wav}.inf" | sed s/ARTIST=//)"
        album="$(grep ALBUM= "$orig_dir/${file%.wav}.inf" | sed s/ALBUM=//)"
        genre="$(grep GENRE= "$orig_dir/${file%.wav}.inf" | sed s/GENRE=//)"
        number="$(grep NUMBER= "$orig_dir/${file%.wav}.inf" | sed s/NUMBER=//)"
        title="$(grep TITLE= "$orig_dir/${file%.wav}.inf" | sed s/TITLE=//)"
#       set -x

        for dir in "$dest_dir" \
                   "$dest_dir/$genre" \
                   "$dest_dir/$genre/$artist" \
                   "$dest_dir/$genre/$artist/$album"
        do
                   if [ ! -d "$dir" ]; then
                       mkdir "$dir";
                   fi
        done
                   

        oggenc -q $quality -G "$genre" -a "$artist" -l "$album" -N "${number#0}" -t "$title" -o "$dest_dir/$genre/$artist/$album/$artist--$number-$title.ogg" "$orig_dir/$file"

        if [ $tar -eq 1 ]; then
            echo -e "\nAdding file to ${tar_name%%.tar}.tar\n"
            tar rf "$dest_dir/$genre/${tar_name%%.tar}.tar" "$dest_dir/$genre/$artist/$album/$artist--$number-$title.ogg";
        fi
	if [ $remove -eq 1 ]; then
	    rm "$orig_dir/$file";
	fi

    done
}

function titles {
    count=0
    
    for file in $(ls "$orig_dir/" | grep .wav$) ; do
        count=$(($count + 1))
        if [ -f "$orig_dir/${file%.wav}.inf" ]; then
            cat "$orig_dir/${file%.wav}.inf";
        fi
        
#        export track${count}="$file"
        read -p "Artist for $file ? [$prevartist] " artist
        read -p "Album for $file ? [$prevalbum] " album
        read -p "Genre for $file ? [$prevgenre] " genre
        read -p "Track number for $file [$numbera] " number
        read -p "Title for $file ? [$prevtitle] " title
        
        number="${number:-$numbera}"

        artist="${artist:-$prevartist}"
        album="${album:-$prevalbum}"
        genre="${genre:-$prevgenre}"
        title="${title:-$prevtitle}"
        
#       export number$count="$number"
#       export artist$count="$artist"
#       export album$count="$album"
#       export genre$count="$genre"
#       export title$count="$title"
        
        prevartist="$artist"
        prevalbum=$album
        prevgenre=$genre
        length=${#number}
        numbera=$(( ${number#0} + 1 ))
        until [ "${#numbera}" -ge "$length" ]; do
            numbera="0$numbera"
        done
        prevtitle=$title
        maxcount=$count

        liste="$liste $file"

        echo ARTIST=$artist > "$orig_dir/${file%.wav}.inf" 
        echo ALBUM=$album >> "$orig_dir/${file%.wav}.inf"
        echo GENRE=$genre >> "$orig_dir/${file%.wav}.inf"
        echo NUMBER=$number >> "$orig_dir/${file%.wav}.inf"
        echo TITLE=$title >> "$orig_dir/${file%.wav}.inf"

    done
}

rip

titles

encode
