#!/bin/sh

# Package
PACKAGE="deluge"
DNAME="Deluge"

# Others
INSTALL_DIR="/usr/local/${PACKAGE}"
#PATH="${INSTALL_DIR}/sbin:${INSTALL_DIR}/bin:${PATH}"
USER="deluge"
DELUGED_USER=${USER}
LOG_FILE="${INSTALL_DIR}/var/deluge.log"

PATH=${INSTALL_DIR}/sbin:${INSTALL_DIR}/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
DESC="Deluge Daemon"
NAME1="deluged"
NAME2="deluge"
DAEMON1=/usr/local/deluge/bin/deluged
DAEMON1_ARGS="-d"             # Consult `man deluged` for more options
DAEMON2=/usr/local/deluge/bin/deluge-web
DAEMON2_ARGS=""               # Consult `man deluge-web` for more options
PIDFILE1=/var/run/$NAME1.pid
PIDFILE2=/var/run/$NAME2.pid
UMASK=022                     # Change this to 0 if running deluged as its own user
PKGNAME=deluge-daemon
# language web interface
# locale -a
# C cs_CZ.utf8 da_DK.utf8 de_DE.utf8 en_US.utf8 es_ES.utf8 fr_FR.utf8 hu_HU.utf8 it_IT.utf8 ja_JP.utf8 ko_KR.utf8
# nb_NO.utf8 nl_NL.utf8 pl_PL.utf8 POSIX pt_BR.utf8 pt_PT.utf8 ru_RU.utf8 sv_SE.utf8 tr_TR.utf8 zh_CN.utf8 zh_TW.utf8
export LANG=POSIX

start_daemon()
{
    # Return
    #   0 if daemon has been started
    #   1 if daemon was already running
    #   2 if daemon could not be started
    start-stop-daemon -S -b -q -p $PIDFILE1 -x $DAEMON1 -c $DELUGED_USER -u $DELUGED_USER -k $UMASK -t > /dev/null
    RETVAL1="$?"
    start-stop-daemon -S -b -q -p $PIDFILE2 -x $DAEMON2 -c $DELUGED_USER -u $DELUGED_USER -k $UMASK -t > /dev/null
    RETVAL2="$?"
    [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] || return 1
    start-stop-daemon -S -b -q -p $PIDFILE1 -m -x $DAEMON1 -c $DELUGED_USER -u $DELUGED_USER -k $UMASK -- $DAEMON1_ARGS
    RETVAL1="$?"
    sleep 2
    start-stop-daemon -S -b -q -p $PIDFILE2 -m -x $DAEMON2 -c $DELUGED_USER -u $DELUGED_USER -k $UMASK -- $DAEMON2_ARGS
    RETVAL2="$?"
    [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] || return 2
}

stop_daemon()
{
    # Return
    #   0 if daemon has been stopped
    #   1 if daemon was already stopped
    #   2 if daemon could not be stopped
    #   other if a failure occurred
    start-stop-daemon -K -s 9 -q -u $DELUGED_USER -p $PIDFILE2
    wait_for_status 1 20 $PIDFILE2 || start-stop-daemon -K -s 9 -q -p $PIDFILE2
    RETVAL2="$?"
    start-stop-daemon -K -s 9 -q -u $DELUGED_USER -p $PIDFILE1
    wait_for_status 1 20 $PIDFILE1 || start-stop-daemon -K -s 9 -q -p $PIDFILE1
    RETVAL1="$?"
    [ "$RETVAL1" = "2" -o "$RETVAL2" = "2" ] && return 2
    rm -f $PIDFILE1 $PIDFILE2
    [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] && return 0 || return 1
    rm -f $PIDFILE1 $PIDFILE2
}


daemon_status()
{
    start-stop-daemon -K -q -t -u $DELUGED_USER -p $PIDFILE1
    RETVAL1="$?"
    start-stop-daemon -K -q -t -u $DELUGED_USER -p $PIDFILE2
    RETVAL2="$?"
    [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] || return 1
}

wait_for_status()
{

    counter=$2
    while [ ${counter} -gt 0 ]; do
        start-stop-daemon -K -q -t -u $DELUGED_USER -p $3
        [ $? -eq $1 ] && return
        let counter=counter-1
        sleep 1
    done
    return 1
}


case $1 in
    start)
        if daemon_status; then
            echo ${DNAME} is already running
        else
            echo Starting ${DNAME} ...
            start_daemon
        fi
        ;;
    stop)
        if daemon_status; then
            echo Stopping ${DNAME} ...
            stop_daemon
        else
            echo ${DNAME} is not running
        fi
        ;;
    status)
        if daemon_status; then
            echo ${DNAME} is running
            exit 0
        else
            echo ${DNAME} is not running
            exit 1
        fi
        ;;
    log)
        echo ${LOG_FILE}
        ;;
    *)
        exit 1
        ;;
esac
