#! /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
DAEMON=/usr/bin/$NAME
PIDFILE=/var/run/$NAME.pid

[ -f "${DAEMON}" -a -x "${DAEMON}" ] || exit 0

# 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 "${DAEMON}" -- ${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

:
