#!/bin/sh

# chkconfig: 345 85 10
# description: Startup/shutdown script for Access DLNA daemon


. /lib/lsb/init-functions

# start Access daemons

DMS_IPC=/var/local/dms_ipc

strings /usr/local/bin/dms_smm | grep "^NFLC/2.[23]" | uniq >/tmp/dms_version

case "$1" in
	start)
		$0 status >/dev/null 2>&1
		if [ $? -eq 0 ]; then
			logger -p local1.err "access already running; use restart"
			exit 0
		fi
		if [ -e $DMS_IPC ]; then
			rm -f $DMS_IPC
			if [ -e $DMS_IPC ]; then
				logger -p local1.err "could not remove $DMS_IPC"
				exit 1
			fi
		fi

		# until firstboot is working correctly
		/usr/bin/ldd /usr/local/bin/mpe_server | grep -q "not found"
		if [ $? -eq 0 ]; then
			logger -p local1.err "mpe_server libraries not available"
			exit 1
		fi

		/usr/bin/ldd /usr/local/bin/dms_smm | grep -q "not found"
		if [ $? -eq 0 ]; then
			logger -p local1.err "dms_smm libraries not available"
			exit 1
		fi

		log_daemon_msg "Starting Access DLNA server "
       		if [ "`/usr/local/sbin/getServiceStartup.sh access`" != "enabled" ]; then
       	 		log_progress_msg "disabled";
			log_end_msg 0
			exit 0
		fi

	        start-stop-daemon --start --quiet --oknodo --background --pidfile /var/run/mpe_server.pid -m --exec /usr/local/bin/mpe_server -- ""
		if [ $? -ne 0 ]; then
			log_end_msg 1
			exit 1
		fi

		# copy the pg_device_list from the saved copy
		if [ ! -f /usr/local/dlna-access/xml/pg_device_list.xml~ ]; then
			/bin/cp -f /etc/wdcomp.d/dlna-server-access/saved_settings/usr/local/dlna-access/xml/pg_device_list.xml~ \
			  /usr/local/dlna-access/xml/pg_device_list.xml~
		fi
		/bin/cp -f /usr/local/dlna-access/xml/pg_device_list.xml~ /var/tmp/pg_device_list.xml
		if [ -e /usr/local/dlna-access/xml/pg_device_list.xml ]; then
			rm -rf /usr/local/dlna-access/xml/pg_device_list.xml
		fi
		ln -s /var/tmp/pg_device_list.xml /usr/local/dlna-access/xml/pg_device_list.xml

		# clear the storage list
		DMS_VERSION=`cat /tmp/dms_version | cut -d ' ' -f 1`
		if [ "${DMS_VERSION}" != "NFLC/2.2" ]; then
			if [ ! -f /usr/local/dlna-access/xml/storage_list.xml~ ]; then
				/bin/cp -f \
				  /etc/wdcomp.d/dlna-server-access/saved_settings/usr/local/dlna-access/xml/storage_list.xml~ \
				  /usr/local/dlna-access/xml/storage_list.xml~
			fi
			/bin/cp -f /usr/local/dlna-access/xml/storage_list.xml~ /usr/local/dlna-access/xml/storage_list.xml
		fi

		start-stop-daemon --start --quiet --oknodo --background --pidfile /var/run/dms_smm.pid -m --exec /usr/local/bin/dms_smm -- --configdir /usr/local/dlna-access/xml --root /usr/local/dlna-access/DMS/media
		if [ $? -ne 0 ]; then
			start-stop-daemon --stop --quiet --oknodo --exec /usr/local/bin/mpe_server
			log_end_msg 1
		fi

		loop=0
		while sleep 1; do
			if [ -p $DMS_IPC ]; then
				/usr/local/sbin/listMediaShares.sh | \
				while read SHARE_NAME; do
					/usr/local/dlna-access/writeAccessContent.sh $SHARE_NAME add
				done
				break;
			else
				loop=`expr $loop + 1`
				if [ $loop -ge 10 ]; then
					logger -p local1.err "could not write $DMS_IPC"
					exit 1
				fi
			fi
		done

		log_end_msg 0
		exit 0
	;;

	stop)
		echo -n "Stopping Access Daemons:"
		echo -n " dms_smm"
		start-stop-daemon --stop --signal KILL --quiet --oknodo --exec /usr/local/bin/dms_smm

		echo -n " mpe_server"
		start-stop-daemon --stop --quiet --oknodo --exec /usr/local/bin/mpe_server
	
		echo "."
		if [ -e $DMS_IPC ]; then
			rm -f $DMS_IPC
			if [ -e $DMS_IPC ]; then
				logger -p local1.err "could not remove $DMS_IPC"
				exit 1
			fi
		fi
		# save a copy of the pg_device_list
		[ -f /var/tmp/pg_device_list.xml ] && \
			cp /var/tmp/pg_device_list.xml /usr/local/dlna-access/xml/pg_device_list.xml~
	;;
	
	restart)
		$0 force-reload
	;;

	force-reload)
		echo -n "Restarting Access Daemons (this will take a while)"
		$0 stop
		echo -n "."
		sleep 2
		echo -n "."
		if $0 start; then
			echo "done."
		fi
	;;

	status)
        pidof /usr/local/bin/mpe_server >/dev/null
        have_mpe_server=$?
        pidof /usr/local/bin/dms_smm >/dev/null
        have_dms_smm=$?

        if [ $have_mpe_server -eq 0 -a $have_dms_smm -eq 0 ]; then
            log_success_msg "access is running."
            exit 0
        else
            log_failure_msg "access is not running."
            exit 1
        fi
        ;;

	*)
		echo "Usage: $0 {start|stop|restart|force-reload|status}" >&2
		exit 1
	;;
esac
