#!/bin/sh

PKGNAME="Polkast"
PKG_ROOT="/usr/local/zy-pkgs"
ZYPKG_DEPS="${PKG_ROOT}/etc/init.d/ZYPKG_DEPS"
STATUS_FILE="/i-data/md0/admin/polkast/STATUS"
PID_FILE="/var/run/polkast.pid"
PID_FILE_MEDIAINFO="/var/run/polkast_mediainfo.pid"
PID_FILE_GD="/var/run/polkast_gd.pid"
CONFIG_FILE="/i-data/md0/admin/polkast/polkast.conf"
LOG_FILE="/i-data/md0/admin/polkast/polkast.log"
PKG_BIN="${PKG_ROOT}/bin/polkast"
PKG_LIB="${PKG_ROOT}/lib/polkast"
POLKAST_HELPER_PROCESSES_PATH="${PKG_ROOT}/bin"  

export POLKAST_HELPER_PROCESSES_PATH

start_polkast() {

    killall -KILL polkast_gd
    killall -KILL polkast_mediainfo
	
    if [ -f ${PID_FILE} ]; then
    	PIDT=`cat ${PID_FILE}`
    else
        PIDT=""
    fi	
    if [ "${PIDT}" == "" ]; then
    	OK_PID=""
    else
    	OK_PID=`ps | grep ${PIDT}`
    fi
    if [ -f ${PID_FILE} ] && [ "${OK_PID}" == "" ]; then
        # Stale PID file
        rm -f ${PID_FILE}
    fi
    LD_LIBRARY_PATH=${PKG_LIB}:$LD_LIBRARY_PATH nice -n 5 ${PKG_BIN} -d -f ${CONFIG_FILE} -o ${LOG_FILE}
}

stop_polkast() {
    if [ -f ${PID_FILE} ]; then                                                                                                                                                                                                               
        PIDT=`cat ${PID_FILE}`                                                                                                                                                                                                                
    else                                                                                                                                                                                                                                      
    	PIDT=""                                                                                                                                                                                                                               
    fi                                                                                                                                                                                                                                        
    if [ "${PIDT}" == "" ]; then                                                                                                                                                                                                              
        OK_PID=""                                                                                                                                                                                                                             
    else                                                                                                                                                                                                                                      
        OK_PID=`ps | grep ${PIDT}`                                                                                                                                                                                                            
    fi                                                                                                                                                                                                                                        
    if [ -f ${PID_FILE} ] && [ "${OK_PID}" == "" ]; then                                                                                                                                                                                    
        # Stale PID file 
        rm -f ${PID_FILE}
    else 
        if [ -f ${PID_FILE} ]; then
            kill -INT `cat ${PID_FILE}`
            timeout=0

            while [ $timeout -le 60 ] && kill -0 `cat ${PID_FILE}`; do
              timeout=$((timeout+1))
              sleep 1
            done
            
            #timeout: force killing polkast
            if [ $timeout -gt 60 ]; then
              kill -9 `cat ${PID_FILE}`
              killall -9 polkast_gd
              killall -9 polkast_mediainfo
            
              rm -f ${PID_FILE_MEDIAINFO}
              rm -f ${PID_FILE_GD}
              rm -f ${PID_FILE}
            fi
        fi
    fi
}

case "$1" in
    getlink)
        ipaddress=`ifconfig egiga0 | grep "inet addr" | cut -d: -f2 | cut -d" " -f1`
        echo " http://${ipaddress}/pkg/Polkast "
        ;;
    status)
# Enabled/Disabled
        if [ -f ${STATUS_FILE} ]; then
            echo "Enabled"       
        else
            echo "Disabled"
        fi 
        ;;
    startup)
# system is starting up, if prev enabled, enable now, else stop
        if [ -f ${STATUS_FILE} ]; then
        # enabled, start polkast
            start_polkast
        fi
        ;;
    shutdown)
# save state, stop everything, system is going down
        if [ -f ${STATUS_FILE} ]; then
        # enabled, stop polkast
            stop_polkast
        fi
        ;;
    enable)
# gui asks us to enable, save state, start the show
        if [ ! -f ${STATUS_FILE} ]; then
            # create status file
            touch ${STATUS_FILE}
        fi
        # start polkast
        start_polkast
        ;;
    disable)
# gui ask us to disable, save state, cleanup
        if [ -f ${STATUS_FILE} ]; then
        # stop polkast
            stop_polkast
            rm -f ${STATUS_FILE}
        fi
        ;;
    *)
        echo "Unknown argument!"
        exit 1
        ;;
esac
exit 0
