#! /bin/sh
#
# Script for automatically launching Skype.
#
# Contact Person: Andres Gomez <agomez@igalia.com>
#
# Copyright (C) 2011 Igalia.
#
# This is free software; see /usr/share/common-licenses/LGPL-2.1 for
# license conditions.  There is NO warranty; not even for
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

### BEGIN INIT INFO
# Provides:          x-skype-autolauncher
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4
# Default-Stop:      0 1 5 6
# Short-Description: Auto launcher for Skype
# Description:       Launchs Skype automatically after running all the
#  needed stuff.
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
SKYPE=/usr/bin/skype
FULLSCREEN=/usr/bin/g_launch_and_fullscreen
NAME=x-automatic-skype
DESC="Automatic Skype Launcher"
PIDFILE=/var/run/$NAME.pid
INITFILE=/etc/init.d/$NAME
DSMETOOL=/usr/sbin/dsmetool
SKYPE_USER=user
SKYPE_GROUP=users
SKYPE_HOME=/home/$SKYPE_USER
SKYPE_OPTS=""
NICENESS=0
GCONF_BIN=/usr/bin/gconftool-2
GCONF_BIN_GET_OPTS="-g"
GCONF_BIN_SET_OPTS="-s"
GCONF_DIR="/system/skype-autolauncher"
GCONF_INSTALLED_ENTRY="installed"
GCONF_FULLSCREEN_ENTRY="fullscreen_active"
GCONF_INIT_ENTRY="init_active"
GCONF_DSME_ENTRY="dsme_active"



# abort if no executable exists
test -x $SKYPE || exit 0

# only use GConf if it exists
test -x $GCONF_BIN && USE_GCONF=yes

# only use dsmetool if it exists
test -x $DSMETOOL || USE_DSMETOOL_START=no
USE_DSMETOOL_STOP=$USE_DSMETOOL_START

# only fullscreen if the tool exists
test -x $FULLSCREEN && USE_FULLSCREEN_START=yes
USE_FULLSCREEN_STOP=$USE_FULLSCREEN_START

if [ -e /etc/osso-af-init/af-defines.sh ]; then
  source /etc/osso-af-init/af-defines.sh
else
  echo "/etc/osso-af-init/af-defines.sh not found!"
  exit 1
fi

for i in /etc/osso-af-init/*.defs; do
  source $i
done


start_skype()
{
        if [ x"$USE_GCONF" = xyes ]; then
            GCONF_INSTALLED_VALUE=`$GCONF_BIN $GCONF_BIN_GET_OPTS "$GCONF_DIR/$GCONF_INSTALLED_ENTRY" 2>/dev/null`
            GCONF_FULLSCREEN_VALUE=`$GCONF_BIN $GCONF_BIN_GET_OPTS "$GCONF_DIR/$GCONF_FULLSCREEN_ENTRY" 2>/dev/null`
            GCONF_INIT_VALUE=`$GCONF_BIN $GCONF_BIN_GET_OPTS "$GCONF_DIR/$GCONF_INIT_ENTRY" 2>/dev/null`
            GCONF_DSME_VALUE=`$GCONF_BIN $GCONF_BIN_GET_OPTS "$GCONF_DIR/$GCONF_DSME_ENTRY" 2>/dev/null`
        fi


        # Exit immediately if the package was uninstalled (but not purged)
        if [ x"$GCONF_INSTALLED_VALUE" = xfalse ]; then
            exit 0
        fi

        # Exit immediately if the user doesn't want to use the init mechanism
        if [ x"$GCONF_INIT_VALUE" = xfalse ]; then
            exit 0
        fi


        if [ x"$GCONF_DSME_VALUE" != xtrue ]; then
            GCONF_DSME_VALUE=false
            USE_DSMETOOL_START=no
        fi


        if [ x"$GCONF_FULLSCREEN_VALUE" != xtrue ]; then
            GCONF_FULLSCREEN_VALUE=false
            USE_FULLSCREEN_START=no
        fi


        if [ x"$USE_FULLSCREEN_START" = xyes ]; then
            COMMAND="$FULLSCREEN"
            COMMAND_OPTS="$SKYPE $SKYPE_OPTS"
        else
            COMMAND="$SKYPE"
            COMMAND_OPTS="$SKYPE_OPTS"
        fi


	if [ x"$USE_DSMETOOL_START" = xno ]; then
		start-stop-daemon --start --quiet \
			--make-pidfile --pidfile $PIDFILE \
			--chuid $SKYPE_USER:$SKYPE_GROUP \
			--background \
			--exec $COMMAND -- $COMMAND_OPTS
                sleep 5
	else
		HOME=$SKYPE_HOME $DSMETOOL -c 2 -T 300 -U $SKYPE_USER -G $SKYPE_GROUP -n $NICENESS -f "$COMMAND $COMMAND_OPTS"
	fi

        if [ x"$USE_GCONF" = xyes ]; then
            $GCONF_BIN $GCONF_BIN_SET_OPTS "$GCONF_DIR/$GCONF_FULLSCREEN_ENTRY"_old --type boolean $GCONF_FULLSCREEN_VALUE 2>/dev/null
            $GCONF_BIN $GCONF_BIN_SET_OPTS "$GCONF_DIR/$GCONF_DSME_ENTRY"_old --type boolean $GCONF_DSME_VALUE 2>/dev/null
        fi
}

stop_skype()
{
        if [ x"$USE_GCONF" = xyes ]; then
            GCONF_INSTALLED_VALUE=`$GCONF_BIN $GCONF_BIN_GET_OPTS "$GCONF_DIR/$GCONF_INSTALLED_ENTRY" 2>/dev/null`
            GCONF_FULLSCREEN_VALUE=`$GCONF_BIN $GCONF_BIN_GET_OPTS "$GCONF_DIR/$GCONF_FULLSCREEN_ENTRY"_old 2>/dev/null`
            GCONF_DSME_VALUE=`$GCONF_BIN $GCONF_BIN_GET_OPTS "$GCONF_DIR/$GCONF_DSME_ENTRY"_old 2>/dev/null`
        fi

        # Exit immediately if the package was uninstalled (but not purged)
        if [ x"$GCONF_INSTALLED_VALUE" = xfalse ]; then
            exit 0
        fi


        if [ x"$GCONF_DSME_VALUE" = xfalse ]; then
            USE_DSMETOOL_STOP=no
        fi


        if [ x"$GCONF_FULLSCREEN_VALUE" = xfalse ]; then
            USE_FULLSCREEN_STOP=no
        fi


        if [ x"$USE_FULLSCREEN_STOP" = xyes ]; then
            COMMAND="$FULLSCREEN"
            COMMAND_OPTS="$SKYPE $SKYPE_OPTS"
        else
            COMMAND="$SKYPE"
            COMMAND_OPTS="$SKYPE_OPTS"
        fi


	if [ x"$USE_DSMETOOL_STOP" = xno ]; then
		start-stop-daemon --stop --oknodo --quiet \
			--pidfile $PIDFILE $COMMAND
	else
		$DSMETOOL -c 2 -S 1 -T 300 -U $SKYPE_USER -G $SKYPE_GROUP -n $NICENESS -k "$COMMAND $COMMAND_OPTS"
	fi
}

set -e

case "$1" in
start)
        printf "Starting $DESC: $NAME"
	start_skype
        printf ".\n"
        ;;

stop)
        printf "Stopping: $DESC: $NAME"
	stop_skype
        printf ".\n"
        ;;

restart|force-reload)
        printf "Restarting $DESC: $NAME"
	stop_skype
        sleep 1
	start_skype
        printf ".\n"
        ;;

*)
        printf "Usage: $INITFILE {start|stop|restart|force-reload}\n" >&2
        exit 1
        ;;
esac


exit 0
