#!/bb/ash
# (c) Robert Shingledecker 2012
# Contributions by Jason Williams 
. /etc/init.d/tc-functions

PATH="/bb:/bin:/sbin:/usr/bin:/usr/sbin"
export PATH

zsyncDebianIndex()
{
	getMirror "$BUILD"
	MIRROR="${MIRROR%/tcz}"
	cd "$TCEDIR"
	if zsync -i "$TCEDIR"/"$DEBINX" "$MIRROR"/"$DEBINX".zsync 2>/dev/null
	then
		rm -f "$DEBINX".zs-old
	else
		wget -O "$TCEDIR"/"$DEBINX" "$MIRROR"/"$DEBINX"
	fi
	cd - > /dev/null
}

unset DEBINX MIRROR
TCEDIR=/etc/sysconfig/tcedir

if [ -f /usr/share/doc/tc/distro.txt ]; then
	DISTRO=`cat /usr/share/doc/tc/distro.txt`
else
	DISTRO=debian
fi

if [ -f /usr/share/doc/tc/repo.txt ]; then
	REPO=`cat /usr/share/doc/tc/repo.txt`
else
	REPO=wheezy
fi

echo "$DISTRO"
BUILD="$1"
[ -z "$BUILD" ] && BUILD=`getBuild`
case $BUILD in
armv6 )
	DEBINX=debian-jessie-all_jessie_main_armhf_Packages
	zsyncDebianIndex
	MIRROR1=http://archive.raspbian.org/raspbian
	;;
armv7 )
	BINARY=binary-armhf
	DEBINX=debian_"$REPO"_main_armhf_Packages
	zsyncDebianIndex
	MIRROR1=http://ftp.us.debian.org/debian
	;;
x86 )	
	BINARY=binary-i386
	if [ "$DISTRO" == "debian" ]; then
		DEBINX=debian_"$REPO"_main_i386_Packages
		zsyncDebianIndex
		MIRROR1=http://ftp.us.debian.org/debian
	elif [ "$DISTRO" == "ubuntu" ]; then
		DEBINX=ubuntu_"$REPO"_main_i386_Packages
		zsyncDebianIndex
		MIRROR1=http://us.archive.ubuntu.com/ubuntu
	fi
	;;
esac
read MIRROR 2>/dev/null < /opt/debmirror 2>/dev/null || MIRROR="$MIRROR1"

if [ -z "$DEBINX" ]
then
	echo "No Package Index Available"
	exit 1
else
	echo "$DEBINX" > /tmp/debinx
fi

#if ls /tmp/debinx.* > /dev/null 2>&1; then 
#	sudo rm /tmp/debinx.*
#fi

if ls -A /opt/debextra > /dev/null 2>&1; then
	for I in `ls /opt/debextra/`; do
		if [ ! -z $(cat /opt/debextra/"$I" | awk '{print $3}') ]; then
			MIR=`cat /opt/debextra/"$I" | awk '{print $1}'`
			DIST=`cat /opt/debextra/"$I" | awk '{print $2}'`
			POOL=`cat /opt/debextra/"$I" | awk '{print $3}'` 
			F="/dists/"$DIST"/"$POOL"/"$BINARY"/"
			if wget -s "$MIR""$F"/Packages.bz2 > /dev/null 2>&1; then
				wget -q -O - "$MIR""$F"/Packages.bz2 | bunzip2 > "$TCEDIR"/debinx."$I"
				echo "Using the repo "$MIR" "$DIST" "$POOL""
			elif wget -s "$MIR"/"$DIST"/"$POOL"/Packages.bz2 > /dev/null 2>&1; then
				wget -q -O - "$MIR"/"$DIST"/"$POOL"/Packages.bz2 | bunzip2 > "$TCEDIR"/debinx."$I"
				echo "Using the repo "$MIR" "$DIST" "$POOL""
			elif wget -s "$MIR"/Packages.bz2 > /dev/null 2>&1; then
				echo "Using the repo mirror "$MIR""
			elif wget -s "$MIR""$F"/Packages.gz > /dev/null 2>&1; then
				wget -q -O - "$MIR""$F"/Packages.gz | gunzip > "$TCEDIR"/debinx."$I"
				echo "Using the repo "$MIR" "$DIST" "$POOL""
			elif wget -s "$MIR"/"$DIST"/"$POOL"/Packages.gz > /dev/null 2>&1; then
				wget -q -O - "$MIR"/"$DIST"/"$POOL"/Packages.gz | gunzip > "$TCEDIR"/debinx."$I"
				echo "Using the repo "$MIR" "$DIST" "$POOL""
			elif wget -s "$MIR"/Packages.gz > /dev/null 2>&1; then
				wget -q -O - "$MIR"/Packages.gz | gunzip > "$TCEDIR"/debinx."$I"
				echo "Using the repo mirror "$MIR""
			elif wget -s "$MIR""$F"/Packages.gen > /dev/null 2>&1; then
				[ -f "$TCEDIR"/debinx."$I" ] && sudo rm "$TCEDIR"/debinx."$I"
				wget -O "$TCEDIR"/debinx."$I" -cq "$MIR""$F"/Packages.gen 
				echo "Using the repo "$MIR" "$DIST" "$POOL""
			elif wget -s "$MIR"/"$DIST"/"$POOL"/Packages.gen > /dev/null 2>&1; then
				[ -f "$TCEDIR"/debinx."$I" ] && sudo rm "$TCEDIR"/debinx."$I"
				wget -O "$TCEDIR"/debinx."$I" -cq "$MIR"/"$DIST"/"$POOL"/Packages.gen 
				echo "Using the repo "$MIR" "$DIST" "$POOL""
			elif wget -s "$MIR"/Packages.gen > /dev/null 2>&1; then
				[ -f "$TCEDIR"/debinx."$I" ] && sudo rm "$TCEDIR"/debinx."$I"
				wget -O "$TCEDIR"/debinx."$I" "$MIR"/Packages.gen 
				echo "Using the repo mirror "$MIR""			

			else
				echo " "
				echo -n "WARNING:   Repo "$MIR"  "$DIST"  "$POOL" is unavailable."
				echo " "
				sleep 5
			fi
		else
			MIR=`cat /opt/debextra/"$I" | awk '{print $1}'`
			DIST="$REPO"
			POOL=`cat /opt/debextra/"$I" | awk '{print $2}'` 
			F="/dists/"$DIST"/"$POOL"/"$BINARY"/"
			if wget -s "$MIR""$F"/Packages.bz2 > /dev/null 2>&1; then
				wget -q -O - "$MIR""$F"/Packages.bz2 | bunzip2 > "$TCEDIR"/debinx."$I"
				echo "Using the repo "$MIR" "$DIST" "$POOL""
			elif wget -s "$MIR"/"$POOL"/Packages.bz2 > /dev/null 2>&1; then
				wget -q -O - "$MIR"/"$POOL"/Packages.bz2 | bunzip2 > "$TCEDIR"/debinx."$I"
				echo "Using the repo "$MIR" "$DIST" "$POOL""
			elif wget -s "$MIR"/Packages.bz2 > /dev/null 2>&1; then
				wget -q -O - "$MIR"/Packages.bz2 | bunzip2 > "$TCEDIR"/debinx."$I"
				echo "Using the repo mirror "$MIR""
			elif wget -s "$MIR""$F"/Packages.gz > /dev/null 2>&1; then
				wget -q -O - "$MIR""$F"/Packages.gz | gunzip > "$TCEDIR"/debinx."$I"
				echo "Using the repo "$MIR" "$DIST" "$POOL""
			elif wget -s "$MIR"/"$POOL"/Packages.gz > /dev/null 2>&1; then
				wget -q -O - "$MIR"/"$POOL"/Packages.gz | gunzip > "$TCEDIR"/debinx."$I"
				echo "Using the repo "$MIR" "$DIST" "$POOL""
			elif wget -s "$MIR"/Packages.gz > /dev/null 2>&1; then
				wget -q -O - "$MIR"/Packages.gz | gunzip > "$TCEDIR"/debinx."$I"
				echo "Using the repo mirror "$MIR""
			elif wget -s "$MIR""$F"/Packages.gen > /dev/null 2>&1; then
				[ -f "$TCEDIR"/debinx."$I" ] && sudo rm "$TCEDIR"/debinx."$I"
				wget -O "$TCEDIR"/debinx."$I" -cq "$MIR""$F"/Packages.gen 
				echo "Using the repo "$MIR" "$DIST" "$POOL""
			elif wget -s "$MIR"/"$POOL"/Packages.gen > /dev/null 2>&1; then
				[ -f "$TCEDIR"/debinx."$I" ] && sudo rm "$TCEDIR"/debinx."$I"
				wget -O "$TCEDIR"/debinx."$I" "$MIR"/"$POOL"/Packages.gen 
				echo "Using the repo "$MIR" "$DIST" "$POOL""
			elif wget -s "$MIR"/Packages.gen > /dev/null 2>&1; then
				[ -f "$TCEDIR"/debinx."$I" ] && sudo rm "$TCEDIR"/debinx."$I"
				wget -O "$TCEDIR"/debinx."$I" -cq "$MIR"/Packages.gen 
				echo "Using the repo mirror "$MIR""
			else
				echo " "
				echo -n "WARNING:   Repo "$MIR" "$DIST" "$POOL" is unavailable."
				echo " "
				sleep 5
			fi
		fi
	done
fi

# Test mirror
if wget -s "$MIRROR" > /dev/null 2>&1; then
	echo "Using the repo "$MIRROR" "$DISTRO" "$REPO" main"
	echo "$MIRROR" > /opt/debmirror
else
	echo "The "$DISTRO" "$REPO" main repo of mirror "$MIRROR" is not available, exiting.."  
exit 1
fi 
