#! /bin/bash -e usage () { echo "usage: emusic-get *" 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