#!/bin/sh
PKGPATH="/var/packages/SqueezeCenter"

SLIMPKG=`ls -l $PKGPATH/target | awk -F "-> " '{print $2}'`
SLIMPORT=`/bin/get_key_value $PKGPATH/INFO adminport`
CACHEPATH="Cache"
LOGPATH="Logs"
PREFSPATH="prefs"
PIDFILENAME="${CACHEPATH}/slimserver.pid"
MYSQLPIDFILENAME="${CACHEPATH}/squeezecenter-mysql.pid"
LOGFILENAME="${LOGPATH}/server.log"

SLIMPIDFILE="${SLIMPKG}/${PIDFILENAME}"
SLIMMYSQLPIDFILE="${SLIMPKG}/${MYSQLPIDFILENAME}"
SLIMLOGFILE="${SLIMPKG}/${LOGFILENAME}"
SLIMCACHEPATH="${SLIMPKG}/${CACHEPATH}"
SLIMLOGPATH="${SLIMPKG}/${LOGPATH}"
SLIMPREFSPATH="${SLIMPKG}/${PREFSPATH}"

SLIMSERVERBIN="slimserver.pl"
SLIMSCANNERBIN="scanner.pl"
SLIMDesktop="/usr/syno/synoman/webman/3rdparty/SqueezeCenter"
DSM_INDEX_ADD="/usr/syno/bin/pkgindexer_add"
DSM_INDEX_DEL="/usr/syno/bin/pkgindexer_del"
PKG_APP_PATH="${PKGPATH}/target/ui"
PKG_INDEXDB_PATH="${PKGPATH}/target/indexdb"

get_pid()
{
	if [ ! -f ${SLIMPIDFILE} ]; then
		return 1
	else
		pid=`cat ${SLIMPIDFILE} 2>/dev/null`
		if [ -f /proc/$pid/cmdline ]; then
			echo $pid
			return 0
		else
			rm -f ${SLIMPIDFILE}
			return 2
		fi
	fi
}

case $1 in
	start)
		SlimSQLPID=`ps | grep mysqld | grep SqueezeCenter |grep -v grep | awk '{print $1}'`
		if [ ! -z "${SlimSQLPID}" ]; then
			`kill -9 ${SlimSQLPID}`
		fi
		slimperl="${SLIMPKG}/${SLIMSERVERBIN}"
		cmd="${slimperl} --daemon --pidfile ${SLIMPIDFILE}"
		cmd="$cmd --cachedir ${SLIMCACHEPATH} --logdir ${SLIMLOGPATH} --prefsdir ${SLIMPREFSPATH}"
		if [ "x${SLIMPORT}" != "x" ]; then
			cmd="$cmd --httpport ${SLIMPORT}"
		fi
		ret=`sudo -u admin $cmd`
		echo $ret;
		if [ -f "{$SLIMPIDFILE}" ]; then
			chown admin.users ${SLIMPIDFILE}
		fi
		if [ -f ${SLIMLOGPATH}/server.log ]; then
			chown admin.users ${SLIMLOGPATH}/server.log
		fi
		if [ -n "$SYNOPKG_DSM_VERSION_MAJOR" -a $SYNOPKG_DSM_VERSION_MAJOR -ge 4 ]; then
			ln -sf ${SLIMPKG}/ui $SLIMDesktop
			${DSM_INDEX_ADD} ${PKG_APP_PATH}/index.conf ${PKG_INDEXDB_PATH}/appindexdb
		else
			ln -sf ${SLIMPKG}/desktop $SLIMDesktop
		fi
		exit 0
	;;
	stop)
		#0 if pid exist but proc/pid do not exist, program crashed
		SLIM_PID=`get_pid`
		RET=$?
		if [ -n "$SYNOPKG_DSM_VERSION_MAJOR" -a $SYNOPKG_DSM_VERSION_MAJOR -ge 4 ]; then
			${DSM_INDEX_DEL} ${PKG_APP_PATH}/index.conf ${PKG_INDEXDB_PATH}/appindexdb
		fi
		rm ${SLIMDesktop}
		#ret = 2 or 1 means pidfile or process does not exists, exit 0 to avoid return non-zero value when running close cmd twice
		case "$RET" in
			2)
				exit 0
			;;
			1)
				exit 0
			;;                                                  
		esac
		#1 kill pid and check that pidfile is removed
		# send kill signal and wait maximum 30 seconds for the process to end
		`kill ${SLIM_PID}`
		waittime=0
		while [ -d /proc/${SLIM_PID} ]; do
			`sleep 1`
                        waittime=`expr $waittime + 1`
			if [ $waittime -ge 30 ]; then
				break
			fi
		done
		`$0 killall`
		#2 check proc/pid do not exist
		if [ ! -d /proc/${SLIM_PID} ]; then
			[ -f ${SLIMPIDFILE} ] && rm -f ${SLIMPIDFILE}
			exit 0
		else
			exit 1
		fi
	;;
	status)
		SLIM_PID=`get_pid`
		RET=$?
		exit $RET
	;;
	killall)
		SlimPLPID=`pidof ${SLIMSERVERBIN}`
		rm -f $SLIMDesktop
		if [ ! -z "${SlimPLPID}" ]; then
			`kill -9 ${SlimPLPID}`
		fi
		SlimSQLPID=`ps | grep mysqld | grep SqueezeCenter |grep -v grep | awk '{print $1}'`
		if [ ! -z "${SlimSQLPID}" ]; then
			`kill -9 ${SlimSQLPID}`
		fi
		SlimScannerPID=`pidof ${SLIMSCANNERBIN}`
		if [ ! -z "${SlimScannerPID}" ]; then
			`kill -9 ${SlimScannerPID}`
		fi
        ;;
	log)
		echo "${SLIMLOGFILE}"
		exit 0
	;;
esac
                                     
