#!/bin/sh

dest=/Users/gui/Downloads/camera
ddest=l:tmp/camera/
T=/tmp/temp.$$.capte
mkdir -p "$T"

# Disque RAM
disque=`hdiutil attach -nomount ram://10240`
newfs_hfs -v "Espace de travail Capte" $disque
ici="$dest"
dest="$T/montage"
mkdir "$dest"
mount -t hfs $disque "$dest"
dest="$dest/images"
mkdir -p "$dest"

cat > "$T/compote" <<TERMINE
#!/bin/sh
# Le processus compare part parfois en boucle infinie. On ôte la vie à tous ceux qu'on voit vivre 10 secondes ou plus.
# D'autre part, scp bloque aussi lorsque le fichier qu'il est en train de transférer disparaît soudain.
while true
do
	ps auxww -o etime | grep '[c]ompare' | sed -e 's/^[^ ]*  *//' -e 's/ .*:/ /' | grep '[1-9].\$' | while read i j
	do
		kill "\$i"
		echo "Oups. Compare \$i trop long. On tue." >&2
	done
	ps -o pid,etime,args | grep '[s]cp.* $ddest' | sed -e 's/:\\([^ ]*\\).*/\\1/' | grep '[1-9].\$' | while read i j
	do
		kill "\$i"
		echo "Oups. scp \$i trop long. On tue." >&2
	done
	sleep 5
done
TERMINE
chmod u+x "$T/compote"

cat > "$T/capatulte" <<TERMINE
#!/bin/sh
# Il arrive à imagesnap de planter un peu trop souvent: on l'enrobe pour le protéger.
while true
do
	/Users/gui/bin/imagesnap -q -t 3.00 -s 640x480
done
TERMINE
chmod u+x "$T/capatulte"

menage()
{
	for pro in apatulte ompote
	do
		ps auxww | grep $pro | sed -e '/g[r]ep/d' | awk '{print $2}' | while read i
	do
		kill "$i"
		done
	done
	killall imagesnap
	cd
	[ -z "$disque" ] || ( sleep 2 && umount $disque && hdiutil detach $disque )
	rm -Rf "$T"
	exit 0
}

trap menage INT
trap menage TERM

cd "$dest"

"$T/compote" &

"$T/capatulte" &

# http://www.instructables.com/id/Web-controlled-Surveillance-Camera/step7/Easy-Motion-Detector-Program/
# http://motiontrack.sourceforge.net/
# http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome
while true
do
	n="`ls -tr | tail -1`"
	sleep 1 # La pause est mise ici plutôt qu'avant: ce pour laisser au fichier le temps de finir de s'écrire, si on arrivait pile au moment de sa génération. En effet scp n'aime pas travailler sur un fichier en train d'être trituré (il se met à bloquer, et pas simplement le temps que le fichier se termine, mais indéfiniment).
	[ "x$a" = "x$n" ] && continue
	if [ -f "$a" -a $n != capte ]
	then
		diff=`compare -metric PSNR "$a" "$n" /dev/null 2>&1 | cut -d . -f 1`
		[ "$diff" = inf -o "$diff" -gt 25 ] && rm -f "$n" && continue
	fi
	[ -z "$ici" ] || cp "$n" "$ici/"
	scp "$n" "$ddest"
	a="$n"
	[ -z "$ici" ] || find . -atime +1m -name \*.jpg -exec rm {} \;
done
