#!/bin/sh

# Package
PACKAGE="tvheadend"
DNAME="Tvheadend"

# Others
INSTALL_DIR="/usr/local/${PACKAGE}"
PATH="${INSTALL_DIR}/bin:/usr/local/bin:/bin:/usr/bin:/usr/syno/bin"
USER="tvheadend"
TVHEADEND="${INSTALL_DIR}/bin/tvheadend"
PID_FILE="${INSTALL_DIR}/var/tvheadend.pid"

DVB_KERNELSCRIPT="/usr/syno/sbin/syno_dvb_admin.sh"
WAIT_FOR_ADAPTERS="0 1" 
TVH_DELAY=15

start_daemon ()
{
    echo "Looking if drivers in /dev/dvb/* are already laoded"
    if [ ! -d /dev/dvb ]
    	then
    	# Run the script from VideoStation to insert the kernel modules
    	echo "/dev/dvb does not exist (yet) ... starting the driver script"
	[ -e "${DVB_KERNELSCRIPT}" ] && "${DVB_KERNELSCRIPT}" "start" 

	# Wait for the adapters to get ready
        for t in $WAIT_FOR_ADAPTERS
        do
	        WAITED=0
	        while [ ! -c "/dev/dvb/adapter${t}/frontend0" ] && [ $WAITED -le $TVH_DELAY ]; do
	        	sleep 1s && echo "`date`: TVHeadend Init; tuner device ${t} is not ready. Waiting 1 second..." "$NAME"
	                WAITED=$((WAITED + 1))
	        done
	        [ ! -c "/dev/dvb/adapter${t}/frontend0" ] && echo "`date`: TVHeadend Init; tuner device ${t} not ready after delay. Continue anyway." "$NAME"
	done
    fi

    echo Starting ${DNAME} ...
    ${TVHEADEND} -f -u ${USER} -c ${INSTALL_DIR}/var -p ${PID_FILE}
}

stop_daemon ()
{
    kill `cat ${PID_FILE}`
    wait_for_status 1 20
    rm -f ${PID_FILE}
    
}

daemon_status ()
{
    if [ -f ${PID_FILE} ] && [ -d /proc/`cat ${PID_FILE}` ]; then
        return
    fi
    return 1
}

wait_for_status ()
{
    counter=$2
    while [ ${counter} -gt 0 ]; do
        daemon_status
        [ $? -eq $1 ] && break
        let counter=counter-1
        sleep 1
    done
}


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