#!/bin/sh

apps_ipkg_old=`nvram get apps_ipkg_old`
is_arm_machine=`uname -m |grep arm`

APPS_PATH=/opt
CONF_FILE=$APPS_PATH/etc/ipkg.conf
ASUS_SERVER=`nvram get apps_ipkg_server`
wget_timeout=`nvram get apps_wget_timeout`
#wget_options="-nv -t 2 -T $wget_timeout --dns-timeout=120"
wget_options="-q -t 2 -T $wget_timeout"
apps_from_internet=`nvram get rc_support |grep appnet`
apps_local_space=`nvram get apps_local_space`
APPS_INSTALL_FOLDER=`nvram get apps_install_folder`
APPS_MOUNTED_PATH=`nvram get apps_mounted_path`
APPS_INSTALL_PATH=$APPS_MOUNTED_PATH/$APPS_INSTALL_FOLDER
ASUS_LIGHTTPD_VER=3.1.0.86
CPFLAG="NO"

# $1: package name.
# return value. 1: have package. 0: no package.
_check_package(){
	package_ready=`ipkg list_installed | grep "$1 "`
	package_ready2=`app_get_field.sh $1 Enabled 1`

	if [ -z "$package_ready" ] && [ -z "$package_ready2" ]; then
		return 0
	else
		return 1
	fi
}

# $1: package name, $2: ipkg server name, $3: force(1/0).
_get_pkg_file_name_old(){
	pkg_file_full=`app_get_field.sh $1 Filename 2`
	old_pkg_file=`echo "$pkg_file_full" |awk 'BEGIN{FS=".ipk"}{print $1}'`
	pkg_file=`echo "$old_pkg_file" |sed 's/\./-/g'`

	if [ "$3" == "1" ] || [ "$2" != "$ASUS_SERVER" ]; then
		echo "$pkg_file_full"
	else
		echo "$pkg_file.tgz"
	fi
}

# $1: package name.
_get_pkg_file_name(){
	pkg_file_full=`app_get_field.sh $1 Filename 2`

	echo "$pkg_file_full"
}

# $1: package name, $2: mounted path.
_install_package(){
	_check_package $1
	if [ "$?" == "0" ]; then
		pkg_server=
		pkg_file=
		installed_ipk_path=
		need_download=1

		installed_ipk_path=`ls $apps_local_space/$1*`
		if [ -n "$installed_ipk_path" ]; then
			need_download=0
		fi

		if [ "$need_download" == "1" ]; then
			# Geting the app's file name...
			server_names=`grep -n '^src.*' $CONF_FILE |sort -r |awk '{print $3}'`
			for s in $server_names; do
				if [ -z "$is_arm_machine" ] && [ -n "$apps_ipkg_old" ] && [ "$apps_ipkg_old" == "1" ]; then
					pkg_file=`_get_pkg_file_name_old $1 $s 0`
				else
					pkg_file=`_get_pkg_file_name $1`
				fi
				wget --spider $wget_options $s/$pkg_file
				if [ "$?" == "0" ]; then
					pkg_server=$s
					break
				fi
			done
			if [ -z "$pkg_server" ]; then
				return 1
			fi

			# Downloading the app's file name...
			ipk_file_name=
			if [ -z "$is_arm_machine" ] && [ -n "$apps_ipkg_old" ] && [ "$apps_ipkg_old" == "1" ] && [ "$pkg_server" == "$ASUS_SERVER" ]; then
				ipk_file_name=`_get_pkg_file_name_old $1 $pkg_server 1`
			else
				ipk_file_name=$pkg_file
			fi

			wget -c $wget_options $pkg_server/$pkg_file -O $2/$ipk_file_name
			if [ "$?" != "0" ]; then
				rm -f $2/$ipk_file_name
				sync

				return 1
			fi

			installed_ipk_path=$2"/"$ipk_file_name
		fi

		# Installing the apps...
		ipkg install $installed_ipk_path
		if [ "$?" != "0" ]; then
			return 1
		fi

		if [ "$need_download" == "1" ]; then
			rm -f $installed_ipk_path
		fi
	fi

	return 0
}
_check_lighttpd_version(){
	lighttpd_control_file=$APPS_INSTALL_PATH/lib/ipkg/info/asuslighttpd.control

	if [ -f "$lighttpd_control_file" ]; then
		lighttpd_version=`cat "$lighttpd_control_file" |grep "Version:"`
		lighttpd_version=${lighttpd_version:9}
		ASUS_LIGHTTPD_VER_NUM=`echo $ASUS_LIGHTTPD_VER |sed 's/\.//g'`
		lighttpd_version_num=`echo $lighttpd_version |sed 's/\.//g'`
		if [ $ASUS_LIGHTTPD_VER_NUM -gt $lighttpd_version_num ]; then
			CPFLAG="YES"
			file=`ls $APPS_INSTALL_PATH/etc/downloadmaster`
			for s in $file; do
				if [ "$s" == "downloadmaster" ]; then
					continue
				else
					if [ ! -d  $APPS_INSTALL_PATH/tmp/ui ]; then
						mkdir -p $APPS_INSTALL_PATH/tmp/ui
						chmod -R 777 $APPS_INSTALL_PATH/tmp/ui
					fi
					cp -rf $APPS_INSTALL_PATH/etc/downloadmaster/$s $APPS_INSTALL_PATH/tmp/ui/
				fi 
			done
			script=`ls $APPS_INSTALL_PATH/etc/asus_script`
			for i in $script; do
				fname=`echo $i | awk 'BEGIN{FS="_"}{print $1}'`
				if [ "$fname" == "asus" ] || [ "$fname" == "dm2" ]; then
					continue
				else
					if [ ! -d $APPS_INSTALL_PATH/tmp/script ]; then
						mkdir -p $APPS_INSTALL_PATH/tmp/script
						chmod -R 777 $APPS_INSTALL_PATH/tmp/script
					fi
					cp -rf $APPS_INSTALL_PATH/etc/asus_script/$i $APPS_INSTALL_PATH/tmp/script/
				fi
			done
			#app_remove.sh asuslighttpd
			ipkg remove asuslighttpd -force-depends
		fi
	fi
}

ipkg_ready=`which ipkg`
if [ -n "$ipkg_ready" ]; then
	_check_lighttpd_version
	_install_package asuslighttpd $APPS_INSTALL_PATH
	if [ "$CPFLAG" == "YES" ]; then
		chmod -R 777 $APPS_INSTALL_PATH
		if [ ! -d $APPS_INSTALL_PATH/etc/downloadmaster ]; then
			mkdir -p $APPS_INSTALL_PATH/etc/downloadmaster
			chmod -R 777 $APPS_INSTALL_PATH/etc/downloadmaster
		fi
		if [ ! -d $APPS_INSTALL_PATH/etc/asus_script ]; then
			mkdir -p $APPS_INSTALL_PATH/etc/asus_script
			chmod -R 777 $APPS_INSTALL_PATH/etc/asus_script
		fi
		cp -rf $APPS_INSTALL_PATH/tmp/ui/* $APPS_INSTALL_PATH/etc/downloadmaster/
		cp -rf $APPS_INSTALL_PATH/tmp/script/* $APPS_INSTALL_PATH/etc/asus_script/
		rm -rf $APPS_INSTALL_PATH/tmp/ui
		rm -rf $APPS_INSTALL_PATH/tmp/script
		sync
	fi
fi

