#!/bin/bash

VERSION='2012/04/01 11:23:58 UTC'

if [ $# -lt 1 ]; then
echo "eg. $0 topdir [--depth]"
exit 1
fi
topdir=$1
cd "${topdir}" || exit 1
DEPTH=
FIND=false
while [ -n "${2}" ]
do
case "${2}" in
	--depth*)
	FIND=true
	depth=${2#*--depth*}
	if test -n "${depth}"; then
	DEPTH="-maxdepth ${depth}"
	fi
	;;
	*)
	if ${FIND}; then
	depth=${2}
	DEPTH="-maxdepth ${depth}"
	fi
;;
esac
shift
done
PATH=${PATH}:/usr/local/bin
DOCUMENTROOT=/home/disklessfun/Documents
FILELST="${DOCUMENTROOT}/Complete.lst"
TD="`pwd`"
STARTTIME=`date '+%Y%m%d%H%M'`
find . ${DEPTH} -type f -name "*.asx"|sort|while read -r i
do
echo "${i}"
WD=${i%/*}  # 最後の/より前の文字列を取り出す
WD=${WD#*/*}  # 最初の/より後ろの文字列を取り出す
AWD="${TD}/${WD}"  # 絶対パス
TARGETFILE=${i##*/}  # 最後の/より後ろを取り出す
basename=${TARGETFILE%\.*}
if ! test -e "${AWD}/${TARGETFILE}"; then
echo "${AWD}/${TARGETFILE} not found"
continue
fi
cd "${AWD}" || exit 1
line="$(cat "${TARGETFILE}"|nkf -w -Lu|grep -i "ref href"|tail -1)"
testline=${line#*href*}  # 最初のhrefより後ろの文字列を取り出す
if test "${testline}" != "${line}"; then
line=${testline}
else
line=${line#*HREF*}  # 最初のHREFより後ろの文字列を取り出す
fi
line=${line#*\"*}  # 最初の"より後ろの文字列を取り出す
line=${line%%\"*}  # 最初の"より前の文字列を取り出す   
URL="${line}"
line="$(cat "${TARGETFILE}"|nkf -w -Lu|grep \<TITLE|tail -1)"
line=${line#*TITLE>*}  # TITLE>より後ろの文字列を取り出す
line=${line%%</TITLE*}  # </TITLEより前の文字列を取り出す   
TITLE="${line}"
line="$(cat "${TARGETFILE}"|nkf -w -Lu|grep \<Title|tail -1)"
line=${line#*Title>*}  # Title>より後ろの文字列を取り出す
line=${line%%</Title*}  # </Titleより前の文字列を取り出す   
Title="${line}"
if test -n "${TITLE}" && test -n "${Title}"; then
fname="${TITLE} ${Title}"
elif test -n "${TITLE}"; then
fname="${TITLE}"
elif test -n "${Title}"; then
fname="${Title}"
else
fname=${basename}  # 多分このようなケースはないだろう
fi
fname=$(echo "${fname}"|sed -e 's/〜/～/'g)
fname=$(echo "${fname}"|sed -e 's/»/-/'g)
fname=$(echo "${fname}"|sed -e 's/"/”/'g)
fname=$(echo "${fname}"|sed -e 's/\\/／/'g)
fname=$(echo "${fname}"|sed -e 's/?/？/'g)
fname=$(echo "${fname}"|sed -e 's/</＜/'g)
fname=$(echo "${fname}"|sed -e 's/>/＞/'g)
fname=$(echo "${fname}"|sed -e 's/:/：/'g)
fname=$(echo "${fname}"|sed -e 's/;/；/'g)
fname=$(echo "${fname}"|sed -e 's/|/｜/'g)
fname=$(echo "${fname}"|sed -e 's/,/，/'g)
fname=$(echo "${fname}"|sed -e 's/*/-/'g)
fname=$(echo "${fname}"|sed -e 's/\^/-/'g)
fname=$(echo "${fname}"|sed -e 's/ / /'g)
fname=$(echo "${fname}"|sed -e 's/—/―/'g)
fname=$(echo "${fname}"|sed -e 's/−/－/'g)
fname=$(echo "${fname}"|sed -e 's/ê/e/'g)
fname=$(echo "${fname}"|sed -e 's/ó/o/'g)
fname=$(echo "${fname}"|sed -e 's/@/＠/'g)
fname=$(echo "${fname}"|sed -e 's/\//-/'g)
while [ "$(echo "${fname}"|cut -b1)" == "-" ]
do
fname=$(echo "${fname}"|sed -e 's/^-//')
done
urlsuffix=${URL##*/}  # 最後の/より後ろ
TARGETEXT=${urlsuffix##*\.}
urlsuffix=${urlsuffix%\.*}  # 最後の.より前
suffixlen=${#urlsuffix}
testsuffix=$(echo ${urlsuffix}|tr -d '0-9')
testsuffixlen=${#testsuffix}
testsuffixlen=$((testsuffixlen+3))
DUPCHEK=false
if test ${testsuffixlen} -le ${suffixlen}; then
	# urlsuffixに数字が3個以上含まれている場合はユニーク識別子としての
	# 価値を持つと判断してそれをファイル名の一部に使用する
	filesuffix=${urlsuffix}
	# このような命名をおこなう場合はダウンロード前に重複チェックが
	# おこなえる
	if test -e "${fname}-${filesuffix}.mp3"; then
	echo "${fname}-${filesuffix}.mp3 already exists"
	continue  # next one
	fi
else
	# 上記以外の場合は代わりのユニーク識別子として
	# asxのファイル名と時間をファイル名の一部に使用する
	filesuffix=${basename}-${STARTTIME}
	matchpattn="${fname}-${basename}-????????????.${TARGETEXT}"
	escapedmatchpattn="`echo "${matchpattn}"|sed -e 's/ /\\\ /'g`"
	lastfile="`eval ls -Atr ${escapedmatchpattn} 2>/dev/null|tail -1`"
	if test -n "${lastfile}";then DUPCHEK=true;fi
fi
echo "${fname}-${filesuffix}"
download-wma.sh "${URL}" . --downloadonly --nodupchk
if test $? -eq 0; then
	TARGETFILE="$(ls -Atr *.${TARGETEXT}|tail -1)"
	if $DUPCHEK; then
	if diff "${TARGETFILE}" "$lastfile" >/dev/null 2>&1; then
		rm "${TARGETFILE}"
		echo "Duplicate:${lastfile} <-> ${fname}-${filesuffix}.${TARGETEXT}"
		echo "Deleted"
		continue  # next one
	fi
	fi
	mv "${TARGETFILE}" "${fname}-${filesuffix}.${TARGETEXT}"
	transcode-wma-to-mp3.sh "${fname}-${filesuffix}.${TARGETEXT}"
	if test $? -eq 0; then
	echo "`pwd`/${fname}-${filesuffix}.mp3" >> "${FILELST}"
	fi
fi
done
