#!/bin/bash
export PATH=/home/owner/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export LANG=ja_JP.UTF-8

test $# -lt 1 && echo "eg. $0 [-C] [-R] [-N] [-L num] [-T title] [-BH] [-BL] [-AH] [-AL] [-M] [-V] [-NS] [-SS] minutes [logfile]" && exit 1


print_endingtime()
{
local seconds=$1
local calculated_endingtime=$((starttime + seconds))
! ${VWONLY} && echo -n "ダビング終了時間: "
${VWONLY} && echo -n "視聴終了時間: "
date -d "@${calculated_endingtime}"
}

output_options()
{
local FLG=false
${CUTMODE} && echo -n "CUTMODE=true," && FLG=true
${RAPMODE} && echo -n "RAPMODE=true," && FLG=true
${LSTMODE} && echo -n "LSTMODE=true," && FLG=true
${RTLOFF} && echo -n "RTLOFF=true," && FLG=true
${SETBH} && echo -n "SETBH=true," && FLG=true
${SETBL} && echo -n "SETBL=true," && FLG=true
${SETAH} && echo -n "SETAH=true," && FLG=true
${SETAL} && echo -n "SETAL=true," && FLG=true
${MIDDLE} && echo -n "MIDDLE=true," && FLG=true
${VWONLY} && echo -n "VWONLY=true," && FLG=true
${NOSTOP} && echo -n "NOSTOP=true," && FLG=true
${SSOUND} && echo -n "SSOUND=true," && FLG=true
${STPONLY} && echo -n "STPONLY=true," && FLG=true
${FLG} && echo
}


PWD=$(cd $(dirname $0);pwd)
STARTCMD="ok"
CUTMODE=false
RAPMODE=false
RTLOFF=false
LSTMODE=false
TTLOUT=false
SETBH=false
SETBL=false
SETAH=false
SETAL=false
MIDDLE=false
VWONLY=false
NOSTOP=false
SSOUND=false
STPONLY=false
TITLE=

while test -n "${2}"
do
case "${1}" in
-C)
CUTMODE=true # 冒頭1分カットモード
shift;;
-R)
RAPMODE=true # ラピッドモード（最新録画を前回記録位置から再生）
STARTCMD="pause"
shift;;
-N)
RTLOFF=true # 取出し処理をしない
shift;;
-L)
LSTMODE=true # 録画リスト利用モード
shift
testline=$(echo "${1}"|tr -d [:digit:])
if test -n "${testline}"; then
echo "Error, num must be numeric."
exit 1
fi
listnum="${1}"
shift
;;
-T)
TTLOUT=true # タイトル出力
shift
TITLE="${1}"
shift
;;
-BH)
SETBH=true # ダビング前に高ビットレートに変更
shift;;
-BL)
SETBL=true # ダビング前に低ビットレートに変更
shift;;
-AH)
SETAH=true # ダビング後に高ビットレートに変更
shift;;
-AL)
SETAL=true # ダビング後に低ビットレートに変更
shift;;
-M)
MIDDLE=true # 途中再生
shift;;
-V)
VWONLY=true # 視聴のみ
#RTLOFF=true # 取出し処理をしない
shift;;
-NS) # 再生終了時に裏録画中、且つ、末尾まで再生する場合に使用する
NOSTOP=true # stop命令を送信しない（裏録画中に不必要なstop命令を送信することは不味い）
shift;;
-SS) # 副音声（必要に応じて事前に-Vオプション使用等でハードディスクを起動しておかないと無効）
SSOUND=true
shift;;
--stoponly) # 実際のところ、この機能はダビング終了時間を変更する場合に使用するケースが殆ど。ダミーでminutes引数が必要
STPONLY=true
shift;;
*)break;;
esac
done




#########################
# ここからSTPONLY=falseの場合のみ
if ! ${STPONLY}; then
#########################




if ${RAPMODE} && ${LSTMODE};then
echo "Error, -R and -L can not be specified at the same time."
exit 1
fi


if test -z "${1}";then
echo "Error, Missing argument"
exit 1
fi
testline=$(echo "${1}"|tr -d [:digit:])
if test -n "${testline}"; then
echo "Error, minutes must be numeric."
exit 1
fi
minutes=${1}


# 簡易ログ出力
if test -n "${2}"; then
logfile=${2}

if !(touch "${logfile}"); then
echo "Error, Wrong logfile name"
exit 1

else

exec > >(tee "${logfile}")
exec 2>&1
fi

fi


# cron等でバッチ処理が開始された際、まだ前の取り込み処理が済んでない場合に待つ、
# もしくはバッチ処理の途中で逐次取り込み処理をおこなった場合に待つ、ために設けた処理
# 注：一見、後述の「er130-ctl.sh check_ready(=ER130のLEDのチェックのみ)」で済むようにも見えるが、
# 前の取り込み処理に含まれる「er130-ctl.sh try_rec」とバッティングしない為にはこちらの仕組みも
# 必要となる。
if ! ${VWONLY}; then wait-fetching.sh || exit 1;fi



# バッチ処理中、一つ前の処理が終了したか確認し、終わってなければ終わるまで待つために設けた処理
if ! ${VWONLY}; then er130-ctl.sh check_ready || exit 1;fi


if ${TTLOUT}; then
echo "タイトル:${TITLE}"
fi

output_options


${SETBH} && "${PWD}/er130-set-20.sh"
${SETBL} && "${PWD}/er130-set-10.sh"


if ${LSTMODE}; then
	channel-setBS.sh rec_list
	sleep 3

	for ((i=${listnum};i>1;i--))
	do
	channel-setBS.sh down
	sleep 2
	done

	channel-setBS.sh ok

	if ${MIDDLE}; then
		sleep 1
		channel-setBS.sh right
	fi

	sleep 3
fi


if ${CUTMODE}; then
	channel-setBS.sh "${STARTCMD}"
	sleep 53.5
	if ! ${VWONLY}; then (er130-ctl.sh rec_on &);fi
	sleep 5
else
	if ! ${VWONLY}; then (er130-ctl.sh rec_on &);fi
	! ${VWONLY} && sleep 5.3
	channel-setBS.sh "${STARTCMD}"
fi

# 副音声切替
${SSOUND} && (sleep 7 && channel-setBS.sh sound_switch && sleep 1 && channel-setBS.sh sound_switch)&

starttime=`date +%s`
echo -n "開始時間: "
date -d "@${starttime}"

seconds=$(((minutes * 60) + 9))
print_endingtime ${seconds}
sleep ${minutes}m
sleep 9





#########################
# ここまでSTPONLY=falseの場合のみ
fi
#########################





! ${VWONLY} && $RTLOFF && er130-ctl.sh nocheck_rec -T "${TITLE}"
! ${VWONLY} && ! $RTLOFF && er130-remocon.sh rec
! ${NOSTOP} && (channel-setBS.sh stop && echo Sending playback stop command)
! ${VWONLY} && echo rec stop
sleep 3;channel-setBS.sh back;sleep 2;channel-setBS.sh back

if (! ${VWONLY}) && (${SETAH} || ${SETAL}); then # VWONLYの場合、AH,ALは無効
er130-ctl.sh rec_off_recoffonly # 稀に録画がOFFになっていないエラーが発生しているので追加
er130-ctl.sh check_ready || exit 1

${SETAH} && "${PWD}/er130-set-20.sh"
${SETAL} && "${PWD}/er130-set-10.sh"
fi

if ! ${VWONLY} && ! $RTLOFF; then
	er130-ctl.sh eject -T "${TITLE}"|| exit 1
	# 他のプロセスが検知できるように(3秒で十分な気もするが)10秒待機
	# ※バッチ処理時、USBポート切替から、取り込み処理起動までの空白時間に
	# 次の処理が開始されてしまうことを防ぐ
	for ((i=10;i>0;i--))
	do
	echo -n "${i}"
	sleep 1
	echo -e "\e[1D\e[1D\e[2K\c"
	done
elif ! ${VWONLY}; then
er130-ctl.sh check_ready || exit 1
else # VWONLYの場合はER130の状態チェックを全くおこなわない
sleep 1
fi
