#!/bin/bash


. /etc/pcontrol/libpcontrol

. /etc/pcontrol/appctl.conf

. /etc/sysconfig/i18n

# restore all execution permissions
restore()
{
for rc in /etc/pcontrol/pcontrol.d/*
do
	. $rc
	run_stop $exec
done
}


# check all processes
run_schedule()
{
RUN=`echo $enable | tr [A-Z] [a-z]`
if [ "$RUN" != "yes" ]; then
	exit 0
fi

DAY=`LC_ALL=C date +"%a"` 
for rc in /etc/pcontrol/pcontrol.d/*
do
	. $rc

	case "$DAY" in
		Mon)
		RUNQUEUE=$MONDAY
		;;
		Tue)
		RUNQUEUE=$TUESDAY
		;;
		Wed)
		RUNQUEUE=$WEDNESDAY
		;;
		Thu)
		RUNQUEUE=$THURSDAY
		;;
		Fri)
		RUNQUEUE=$FRIDAY
		;;
		Sat)
		RUNQUEUE=$SATURDAY
		;;
		Sun)
		RUNQUEUE=$SUNDAY
		;;
		*)
			echo "Day not expected"
			exit 1
		;;
	esac

	do_runqueue "$RUNQUEUE"
done
}


ctl_add()
{
DESKTOP="$1"

if [ ! -f "${DESKTOP}" ]; then
	echo "No .desktop to add"
	exit 1
fi

EXEC=`sed -n "s@^[Ee]xec=@@p" ${DESKTOP}`
EXEC_PATH=`echo $EXEC | sed -e "s@ .*@@" | sed -e "s@\"@@g"`
BIN=`basename $EXEC_PATH`
BIN_PATH=`which $BIN 2>/dev/null`

case "$LANG" in
	pt_BR*)
		NAME=`sed -n 's@GenericName\[pt_BR\]=@@p' $DESKTOP`
		if [ -z "$NAME" ]; then
			NAME=`sed -n 's@Name\[pt_BR\]=@@p' $DESKTOP`
		fi
	;;

	*)
		NAME=`sed -n 's@GenericName=@@p' $DESKTOP`
	;;
esac

if [ -z "$NAME" ]; then
	NAME=`sed -n 's@Name=@@p' $DESKTOP`
fi

if [ -z "$BIN_PATH" ]; then
	# try common places
	if [ -f "/usr/games/${BIN}" ]; then
		BIN_PATH="/usr/games/${BIN}"
	fi
fi

if [ -z "$BIN_PATH" ]; then
	echo "Can't locale binary"
	exit 1
fi

cp -f ${BIN_PATH} ${backup}
chmod ugo-r ${BIN_PATH}
chmod ugo-rx ${backup}/${BIN}

if [ -z "$NAME" ]; then
	NAME="${BIN}"
fi

cat > /etc/pcontrol/pcontrol.d/${BIN} << EOF
# binary control data
desktop=$DESKTOP
exec=$BIN_PATH
NAME="$NAME"
MONDAY=""
TUESDAY=""
WEDNESDAY=""
THURSDAY=""
FRIDAY=""
SATURDAY=""
SUNDAY=""
EOF

}


ctl_del()
{
CONTROL="$1"

if [ ! -f "${CONTROL}" ]; then
	echo "No control to del"
	exit 1
fi

. ${CONTROL}

run_stop $exec
BIN=`basename $exec`
rm -f ${backup}/${BIN} 
rm -f ${CONTROL}
}

 
case "$1" in

	check)
		run_schedule
		;;
	add)
		ctl_add $2
		;;

	del)
		ctl_del $2
		;;

	restore)
		restore
		;;

	restart)
		restore
		run_schedule
		;;

	*)
		echo "$0 [check|add|del|restore]"
		echo "  check - run from crontab to periodic check applications"
		echo "  add <desktop file> - add new application to controller"
		echo "  del <controller file> - delete application from controller"
		echo "  restore - restore all applications to ok-to-run state"
		echo "  restart - run restore and check"
		echo ""
		exit 1
		;;
esac
 
		
	
