#!/bin/bash
#
#
# Rips CDs to FLAC via cdparanoia
#

# NOTE: You must provide a cuesheet via stdin

BASEDIR=~/mp3/albums

CARTIST=
CALBUM=
CTRACKTOTAL=
declare -a TRACKTITLES

read_cuesheet ()
{
    ORIGIFS=$IFS
    IFS='
'

    read CARTIST
    read CALBUM
    read CTRACKTOTAL

    for (( i = 1 ; $i <= $CTRACKTOTAL ; i++ )); do
        read TRACKTITLES[$i]
    done

    IFS=$ORIGIFS
}

dump_cuesheet ()
{
    echo Cue sheet read:
    echo ---------------
    echo ARTIST : $CARTIST
    echo ALBUM  : $CALBUM
    echo TRACKS : $CTRACKTOTAL
    echo   --

    for (( i = 1 ; $i <= $CTRACKTOTAL ; i++ )); do
        echo $i : ${TRACKTITLES[$i]}
    done

    echo Done.
}


# Prep directories
prep_directories ()
{
    mkdir -p "$BASEDIR/$CARTIST/$CALBUM"
}


# Run cdparanoia -B
rip_cdparanoia ()
{
    cdparanoia -B
}

# Okay, we've ripped all tracks, encode to FLAC files


rip_encode_flac ()
{
    for (( trackn = 1 ; $trackn <= $CTRACKTOTAL ; trackn++ )); do
        trackid=$trackn
        if [[ $trackn -lt 10 ]]; then
            trackid="0$trackn"
        fi
        trackfile=track$trackid.cdda.wav

        title=${TRACKTITLES[$trackn]}
        flacfile="$trackid - $title.flac"

        flac -8 -o "$flacfile" $trackfile

        # Now, add metadata
        cat > /tmp/metaflac-tags$trackid <<EOF
performer=$CARTIST
artist=$CARTIST
album=$CALBUM
tracknumber=$trackn
title=$title
EOF
        metaflac --import-tags-from /tmp/metaflac-tags$trackn "$flacfile"

        # Cleanup
        rm /tmp/metaflac-tags$trackid
    done
}


# MAIN

START=1
END=99
SKIP_RIP=0
while getopts 'nt' myarg; do
    case $myarg in
        n)
            echo "Encoding only, skipping ripping"
            SKIP_RIP=1
            ;;
        t)
            echo "Testing cuesheet"
            read_cuesheet
            dump_cuesheet
            exit 0
            ;;
    esac

    shift
done

echo ">>>> Reading cuesheet from STDIN"
read_cuesheet

echo "---------------------------"
echo "Artist : $CARTIST"
echo "Album  : $CALBUM"


if [ "$SKIP_RIP" == "0" ]; then
    echo ">>>> Prepping directories"
    prep_directories
    echo ">>>> Ripping tracks"
    cd "$BASEDIR/$CARTIST/$CALBUM"
    rip_cdparanoia
fi

echo ">>>> Encoding tracks"
cd "$BASEDIR/$CARTIST/$CALBUM"
rip_encode_flac

echo ">>>> Done."



