#!/bin/sh

# Par Julien MOREAU	( jmoreau@bigfoot.com )

nbps=1				# Nombre de paramètres souhaités
delay=1				# Délai entre 2 teste (en minutes)
mailto=""			# Destinataire par défaut
cmd=`basename $0`		# Nom de la commande

# Son à jouer :
son="/public/ICQ/Sounds/Online.au"
if test ! -r "$son" ; then son=`locate BuddyArrive.au` ; fi

usage="Usage: $cmd [-h]\n"   # Message d'aide
usage=$usage"\n\tAffiche ce message d'aide.\n"
usage=$usage"\nUsage: $cmd [-m <mail>] <login> [...] &\n"
usage=$usage"\n\tAttends une ou plusieurs personnes en vérifiant si elles
 sont loguées\n\ttoutes les $delay minute(s) puis, à l'arrivée de chacune :"
usage=$usage"\n\t - joue le son \"$son\","
usage=$usage"\n\t - et affiche ou envoie par mail un message adapté."
usage=$usage"\n\n\tC'est l'option -m qui permet d'envoyer un mail"
usage=$usage"\n\tplutôt que d'afficher un message en open-window."

if test `uname` != "HP-UX" ; then e="-e" ; fi

if [ "$#" -ge 2 -a "$1" = "-m" ] ; then mailto="$2" ; shift 2 ; fi

if [ "$#" -lt $nbps -o "$1" = "-h" ] ; then	# Vérifie le nb de paramètres
	echo $e $usage 1>&2 ; exit 2		# Affichage aide puis arrêt
fi

search="-e wm -e enlightenment -e sh -e sawfish -e box -e gnome -e kde"
cmpt=0 ; liste="" ; listn="" ; tmp=".$cmd.tmp"
> $tmp		# On vide le fichier temporaire s'il existait
for login in $* ; do
	ligne=`grep -- ^$login: /etc/passwd`
	if [ $? -ne 0 ] ; then
		echo $e "Login \"$login\" inexistant sur ce serveur." >> $tmp
	else
		nom=`echo $ligne|cut -d: -f5|cut -d, -f1`
		ps -u $login|grep -qi $search
		if [ $? -eq 0 ] ; then
			echo "$nom est déjà logué(e) !" >> $tmp
		else
			liste="$liste $login" ; cmpt=`expr $cmpt + 1`
			listn=$listn"\n\t$cmpt) $nom" >> $tmp
		fi
	fi
done

echo $e "\nListe des personnes à attendre :\n$listn" >> $tmp

nbl=`expr 5 + $#`
hauteur=`expr $nbl \* 21`
cat $tmp
#xmessage -geometry 390x$hauteur -file $tmp -timeout 5
rm -f $tmp

delay=`expr $delay \* 60`	# Transforme le délai en secondes
while test -n "$liste" ; do
	sleep $delay
	newliste=""
	for login in $liste ; do
		ps -u $login|grep -q $search
		if [ $? -eq 0 ] ; then
			if test -n "$son" ; then
				### Alerte sonore ###
				auplay "$son" || play "$son" 2> /dev/null
			fi
			ligne=`grep ^$login: /etc/passwd`
			nom=`echo $ligne|cut -d: -f5|cut -d, -f1`
			### Alerte visuelle ###
			msg="$nom vient de se loguer !"
			if test -z "$mailto" ; then
				xmessage -center "$msg" || echo $e "\n$msg"
			else
				echo $msg | mail -s "$msg" "$mailto"
			fi
		else
			newliste="$newliste $login"
		fi
	done
	liste="$newliste"
done

exit 0		# Sortie sans erreur