#! /bin/bash -e

usage () {
    echo "usage: emusic-get <emx-file>*"
    exit 1
}

[ -n "$1" ] || usage

## User config (~/.emusic-get)
##
musicroot=.
#note... on FAT32, a filename cannot end with a .
function normalize { cat; }
function album-dir {
    if [[ $disccount -gt 1 ]]; then
        echo "$artist/$album/disc$discnum";
    else
        echo "$artist/$album"
    fi
}
if [[ -e ~/.emusic-get ]]; then
    source ~/.emusic-get
fi

for emx in "$@"; do
    emxtracks=($(xmlstarlet sel -t -m //TRACK -v TRACKID -n "$emx"))
    echo "$emx:" ${#emxtracks[@]} tracks
    for id in "${emxtracks[@]}"; do
        eval $(xmlstarlet sel -t -m "//TRACK[TRACKID=$id]" \
            -o 'disccount=' -v DISCCOUNT -n \
            -o 'discnum=' -v DISCNUM -n \
            -o 'tracknum=' -v TRACKNUM -n \
            -o 'trackcount=' -v TRACKCOUNT -n \
            "$emx")
        artist=$(xmlstarlet sel -t -m "//TRACK[TRACKID=$id]" \
            -v ARTIST "$emx" | normalize)
        album=$(xmlstarlet sel -t -m "//TRACK[TRACKID=$id]" \
            -v ALBUM "$emx" | normalize)
        trackurl=$(xmlstarlet sel -t -m "//TRACK[TRACKID=$id]" -v TRACKURL "$emx")
        if [ $trackcount -lt 10 ]; then
            fmt="%d"
        else
            fmt="%02d"
        fi
        dir="$musicroot/"`album-dir`
        file=${trackurl##*/}
        echo disc $discnum/$disccount, track $tracknum/$trackcount, $artist: $file
        mkdir -p "$dir"
        test -e "$dir/cover.jpg" || \
            wget -O "$dir/cover.jpg" \
                $(xmlstarlet sel -t -m "//TRACK[TRACKID=$id]" \
                    -v ALBUMARTLARGE "$emx")
        wget -c -O "$dir/"$(printf $fmt $tracknum)."$file" "$trackurl"
    done
done
