#! /bin/sh
# tvheadend startup script inspired by the Debian one in the package

# Author: Yann E. MORIN <yann.morin.1998@free.fr>

PATH=/usr/sbin:/usr/bin:/sbin:/bin
NAME=tvheadend
PIDFILE=/var/run/$NAME.pid

# Read configuration variable file if it is present
[ -r "/etc/default/${NAME}" ] && . "/etc/default/${NAME}"

ARGS="-f"
[ -z "${TVH_USER}"      ] || ARGS="${ARGS} -u ${TVH_USER}"
[ -z "${TVH_GROUP}"     ] || ARGS="${ARGS} -g ${TVH_GROUP}"
[ -z "${TVH_ADAPTERS}"  ] || ARGS="${ARGS} -a ${TVH_ADAPTERS}"
[ -z "${TVH_HTTP_PORT}" ] || ARGS="${ARGS} -w ${TVH_HTTP_PORT}"
[ -z "${TVH_HTSP_PORT}" ] || ARGS="${ARGS} -e ${TVH_HTSP_PORT}"
[ "${TVH_DEBUG}" = "1"  ] && ARGS="${ARGS} -s"

# If first run, start in wizard mode
if [ -z "$(ls -1 /home/tvheadend/.hts/tvheadend/accesscontrol/ 2>/dev/null)" ]; then
    ARGS="${ARGS} -C"
fi

case "$1" in
    start)
        printf "Starting TVHeadend daemon: "
        if start-stop-daemon -S -q -p ${PIDFILE} -m --exec /usr/bin/tvheadend -- ${ARGS}; then
            printf "OK\n"
        else
            printf "failed\n"
        fi
        ;;
    stop)
        printf "Stopping TVHeadend daemon: "
        start-stop-daemon -K -q -p ${PIDFILE} -s TERM
        sleep 2
        if start-stop-daemon -K -q -p ${PIDFILE} -t; then
            printf "failed, killing: "
            start-stop-daemon -K -q -p ${PIDFILE} -s KILL -o
        fi
        printf "OK\n"
        ;;
    restart|force-reload)
        "${0}" stop
        sleep 2
        "${0}" start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

:
