#!/bin/sh
# ASUS app autorun script
# $1: device name, $2: mounted path.


nvram set apps_state_autorun=0 # INITIALIZING
nvram set apps_state_error=0
APPS_INSTALL_FOLDER=`nvram get apps_install_folder`
SWAP_ENABLE=`nvram get apps_swap_enable`
SWAP_THRESHOLD=`nvram get apps_swap_threshold`
SWAP_FILE=`nvram get apps_swap_file`
SWAP_SIZE=`nvram get apps_swap_size`
APPS_PATH=/opt
PATH=$APPS_PATH/usr/bin:$APPS_PATH/bin:$APPS_PATH/usr/sbin:$APPS_PATH/sbin:/usr/bin:/bin:/usr/sbin:/sbin
unset LD_LIBRARY_PATH
unset LD_PRELOAD


if [ -n "$1" ] && [ -n "$2" ];then
	APPS_DEV=$1
	APPS_MOUNTED_PATH=$2
	nvram set apps_dev=
	nvram set apps_mounted_path=
fi

original_apps_mounted_path=`nvram get apps_mounted_path`
if [ -n "$APPS_DEV" ] && [ -n "$APPS_MOUNTED_PATH" ] && [ -z "$original_apps_mounted_path" ]; then
	nvram set apps_dev=$APPS_DEV
	nvram set apps_mounted_path=$APPS_MOUNTED_PATH
else
	nvram set apps_state_error=1
	exit 1
fi

APPS_INSTALL_PATH=$APPS_MOUNTED_PATH/$APPS_INSTALL_FOLDER

i=0
while [ $i -le 20 ]; do
	success_start_service=`nvram get success_start_service`
	if [ "$success_start_service" == "1" ]; then
		break
	fi

	i=$((i+1))
	echo "autorun APP: wait $i seconds..."
	sleep 1
done


nvram set apps_state_autorun=1 # CHECKING_POOL
APPS_MOUNTED_TYPE=`mount |grep "/dev/$APPS_DEV on " |awk '{print $5}'`
if [ "$APPS_MOUNTED_TYPE" == "vfat" ] || [ "$APPS_MOUNTED_TYPE" == "tfat" ]; then
	link_ready=`/usr/sbin/app_check_pool.sh $APPS_DEV`
	if [ "$link_ready" == "Non-linked" ]; then
		echo "Building the link of $APPS_MOUNTED_PATH."
		/usr/sbin/app_base_link.sh
		if [ "$?" != "0" ]; then
			# apps_state_error was already set by app_base_link.sh.
			exit 1
		fi
	elif [ "$link_ready" == "linked" ]; then
		echo "Had already built the link of $APPS_MOUNTED_PATH."
	elif [ "$link_ready" == "Non-mounted" ]; then
		echo "Had not mounted yet!"
		nvram set apps_state_error=2
		exit 1
	else
		echo "Invalid input of the mounted path!"
		nvram set apps_state_error=1
		exit 1
	fi
else
	echo "Building the link of $APPS_MOUNTED_PATH."
	/usr/sbin/app_base_link.sh
	if [ "$?" != "0" ]; then
		# apps_state_error was already set by app_base_link.sh.
		exit 1
	fi
fi


nvram set apps_state_autorun=2 # CREATING_SWAP
if [ "$SWAP_ENABLE" != "1" ]; then
	echo "Disable to swap!"
else
	mem_size=`free |sed '1,3d' |awk '{print $4}'`
	if [ "$SWAP_THRESHOLD" == "" ] || [ $mem_size -lt $SWAP_THRESHOLD ]; then
		pool_size=`df /dev/$APPS_DEV |sed '1d' |awk '{print $4}'`
		if [ $pool_size -gt $SWAP_SIZE ]; then
			if [ -e "$APPS_INSTALL_PATH/$SWAP_FILE" ]; then
				swapoff $APPS_INSTALL_PATH/$SWAP_FILE
				rm -rf $APPS_INSTALL_PATH/$SWAP_FILE
			fi

			swap_count=`expr $SWAP_SIZE / 1000 - 1`
			echo "dd if=/dev/zero of=$APPS_INSTALL_PATH/$SWAP_FILE bs=1M count=$swap_count"
			dd if=/dev/zero of=$APPS_INSTALL_PATH/$SWAP_FILE bs=1M count=$swap_count
			echo "mkswap $APPS_INSTALL_PATH/$SWAP_FILE"
			mkswap $APPS_INSTALL_PATH/$SWAP_FILE
			echo "swapon $APPS_INSTALL_PATH/$SWAP_FILE"
			swapon $APPS_INSTALL_PATH/$SWAP_FILE
		else
			echo "No enough partition size!"
			nvram set apps_state_error=3
			exit 1
		fi
	fi
fi


nvram set apps_state_autorun=3 # EXECUTING
link_internet=`nvram get link_internet`
if [ "$link_internet" == "2" ]; then
	/usr/sbin/app_update.sh &
fi

# run all APPs by order.
/usr/sbin/app_init_run.sh allpkg start


nvram set apps_state_autorun=4 # FINISHED
