#!/bin/bash
#
# auto-ER130-move.sh
#
# このスクリプトはdevmonから呼ばれることを前提としています。
#
# ※zenityコマンドが必要です。
#

PATH=${PATH}:/usr/local/bin:${HOME}/bin
MEDIAPATH=/media/owner
MOVESH="/home/owner/bin/ER130-move.sh"
CTLSH="/home/owner/bin/er130-ctl.sh"
ASSORTSH="/home/owner/bin/ER130-assort-jpg.sh"
COPYLOG="/tmp/ER130-move.log"
COMPLMSG="Moving complete, without errors."
TOADDRESS="owner@hogehoge.com"
FLADDRESS="root@hogehoge.com"
EJECT=true
export DISPLAY=:0.0
export LANG=ja_JP.UTF-8


command=${0##*/}  # 最後の/より後ろを取り出す
command=${command%\.*}  # 最後の.より前


echo -n > "/tmp/${command}.log" # 終了時に消さないから
exec 1>> "/tmp/${command}.log" 2>> "/tmp/${command}.log"


sendmail()
{
cat -v "/tmp/${command}.log"| \
mail -s "${command}" \
-r "${FLADDRESS}" "${TOADDRESS}"
}

exitmail()
{
if test ${0} == "1"; then
	sendmail
	exit 1
else
	exit 0
fi
}


RESONLY=false
while test -n "${2}"
do
case "${2}" in
--restoreonly)
RESONLY=true
break;;
*)break;;
esac
done

#killall zenity

LABEL=$1
mountpoint=
if test -n "${LABEL}"; then
mountpoint="${MEDIAPATH}/${LABEL}"
fi
if test -z "${mountpoint}"; then
led-error on
TEXT="Mountpoint not given"
echo "${TEXT}"
sendmail
zenity --error --title "devmon" --text "${TEXT}" &
exit 1
fi




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





MOUNTOK=false
for ((i=16;i>0;i--))
do
if (mountpoint "${mountpoint}" 2>/dev/null) then
MOUNTOK=true
break
fi
sleep 0.5
done


# screensaver起動中等の場合、自力でマウント
if ! ${MOUNTOK}; then

TARGETDEVICE=$(blkid -L "${LABEL}"|tail -1)
if test -z "${TARGETDEVICE}"; then
led-error on
TEXT="Unable to get target device"
echo "${TEXT}"
sendmail
zenity --error --title "devmon" --text "${TEXT}" &
exit 1
fi

sudo install -o owner -g owner -m 755 -d "${mountpoint}"
sudo mount -t ntfs -o rw,nosuid,nodev,allow_other,default_permissions \
${TARGETDEVICE} "${mountpoint}"
RET=$?
if test ${RET} -ne 0; then
led-error on
TEXT="Mount failed: ${TARGETDEVICE} ${mountpoint}"
echo "${TEXT}"
sudo rmdir "${mountpoint}"
sendmail
zenity --error --title "devmon" --text "${TEXT}" &

# マウントエラーの場合、ER130側でディスク修復
if (grep -q "NTFS is either inconsistent" "/tmp/${command}.log"); then
echo -n > "/tmp/${command}.log" # 再メールの準備(既にメールした分を削除)
powerSwitch.USB_Switcher port1
echo "sleep 30" >> "/tmp/${command}.log"
sleep 30
echo "${CTLSH} repair" >> "/tmp/${command}.log"
${CTLSH} repair
echo "${CTLSH} eject" >> "/tmp/${command}.log"
${CTLSH} eject
sendmail
fi

exit 1
fi

fi


led-blue on


# 最新ファイル移動処理
# sleep 5 は後述のユーザーリクエストを受け付ける時間を最低限確保する為
echo -n > "${COPYLOG}"
(sleep 5;"${MOVESH}" "${LABEL}" 2>&1|tee "${COPYLOG}")| \
(zenity --progress --pulsate --auto-close --no-cancel \
--title "devmon" --text "ファイル移動処理中")

# アンマウント中止指示の検出 
# ↓ 非常にダーティーなちょっとした工夫
if test $? -eq 1; then
EJECT=false
"${MOVESH}" "${LABEL}" 2>&1|tee "${COPYLOG}"
fi

"${ASSORTSH}" 2>&1|tee -a "${COPYLOG}"


if !(egrep -q "^${COMPLMSG}$" "${COPYLOG}"); then
led-error on
touch /tmp/Copying_Failure
if ${EJECT}; then
TEXT="ファイル移動処理中にエラーが発生"
else
TEXT="ユーザーリクエストにより、アンマウント処理を中止しました。他のエラーも発生しました。"
fi
echo "${TEXT}"
sendmail
zenity --error --title "devmon" --text "${TEXT}" &
exit 1
fi

if ! ${EJECT}; then
TEXT="ユーザーリクエストにより、アンマウント処理を中止しました"
echo "${TEXT}"
zenity --info --title "devmon" --text "${TEXT}" &
exit 0
fi

cd /media || exitmail 1
sync





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





# アンマウント
echo "${mountpoint}";
if test -n "${mountpoint}"; then
TEXT="`sudo umount "${mountpoint}" 2>&1`"
if test $? -eq 0; then
sudo rmdir "${mountpoint}" 2>/dev/null
touch /tmp/Ejection_Success
powerSwitch.USB_Switcher port1
${CTLSH} try_rec
RET=$?
	if test ${RET} -eq 1; then
	TEXT="try_recで異常発生"
	sendmail
	led-blue off
	zenity --error --title "devmon" --text "${TEXT}" &
	exit 1
	elif test ${RET} -eq 2; then
	led-blue off
	sendmail
	exit
	fi
else
led-error on
touch /tmp/Ejection_Failure
echo "${TEXT}"
sendmail
zenity --error --title "devmon" --text "${TEXT}" &
exit 1
fi
fi
led-blue off
exit
