#!/bin/sh

NAME=freedownloadd
BROWSER_PIPE="/var/local/log/browser_log"
FREEDOWNLOAD="/usr/local/bin/freedownload"
FD_PIDFILE="/var/local/browser/freedownload.pid"
MY_PIDFILE="/var/local/browser/freedownloadd.pid"



kill_tree() {
    [ -n "$2" ] || return
    local children
    local parent
    children=$(ps -ef | awk '$3 == '"$2"' {print $2}')
    kill $1 $2  >/dev/null 2>&1
    if [ -n "$children" ]
    then
	for parent in $children
	do
	    kill_tree $1 "$parent"
	done
    fi
}

start() {
    driveModeState=$(lipc-get-prop com.lab126.volumd driveModeState)
    (
    lipc-wait-event -m com.lab126.volumd driveModeStateChanged | while true
    do
	rm -f "$FD_PIDFILE"
	rm -f "$BROWSER_PIPE"
	while [ "$driveModeState" != "0" ]; do read dummy driveModeState; done
	mkfifo "$BROWSER_PIPE"
	/etc/init.d/browserd stop
	${FREEDOWNLOAD} &
	/etc/init.d/browserd start
	while [ ! -f "$FD_PIDFILE" ]; do usleep 100000; done
	FD_PID=$(cat "$FD_PIDFILE")
	while [ ! -n "$FD_PID" ]; do usleep 100000; FD_PID=$(cat "$FD_PIDFILE"); done	
	while [ "$driveModeState" == "0" ]; do read dummy driveModeState; done
	kill_tree -TERM "$FD_PID"
	usleep 100000
        kill_tree -KILL "$FD_PID"
    done 
    ) &
    echo "$!" > "/var/local/browser/freedownloadd.pid"
}

stop() {
	unset FD_PID
	[ -f "$FD_PIDFILE" ] && FD_PID=$(cat "$FD_PIDFILE")
	if [ -n "$FD_PID" ]
	then
    	    kill_tree -TERM "$FD_PID"
    	    usleep 100000
    	    kill_tree -KILL "$FD_PID"
	else
	    pkill -f "$FREEDOWNLOAD"
    	    usleep 100000
	    pkill -f -KILL "$FREEDOWNLOAD"
	fi
        rm -f "$FD_PIDFILE"
        rm -f "$BROWSER_PIPE"
	/etc/init.d/browserd stop
	/etc/init.d/browserd start
	[ -f "$MY_PIDFILE" ] && MY_PID=$(cat "$MY_PIDFILE")
	rm -f "$MY_PIDFILE"
	if [ -n "$MY_PID" ]
	then
    	    kill_tree -TERM "$MY_PID"
    	    usleep 100000
    	    kill_tree -KILL "$MY_PID"
	else
            pkill -f freedownloadd
            usleep 100000
            pkill -f -KILL freedownloadd
	fi
}

running() {
	[ -f "$MY_PIDFILE" ] && MY_PID=$(cat "$MY_PIDFILE")
	if [ -z "$MY_PID" ]
	then
	    echo "$NAME is stopped"
	    return 1
	else
	    if ps x -o pid | grep -q "\b$MY_PID\b"
	    then
		echo "$NAME is running"
		return 0
	    else
		echo "PID file exists but $NAME is not running"
		return 2
	    fi
	fi
}

case "$1" in
  start)
    if running >/dev/null
    then
	echo "$NAME is already running"
	exit 1
    fi
    start
  ;;
  stop)
    stop
  ;;
  status)
    running
  ;;
  restart|force-reload)
    stop
    sleep 1
    start
  ;;
  *)
    echo "Usage: /etc/init.d/$NAME {start|stop|status|restart|force-reload}" >&2
    exit 1
  ;;
esac

exit 0
