#!/bin/sh

#
# Version 0.0.0 Nov 2009
#
# Script to download files from zshare.
# Requires shell with job control (POSIX sh, bash, ksh)
# Requires wget with "--post-data" option (tested with wget 1.10.x)
# Requires "htd". Otherwise, uncomment htd() definition below
#

# Current status: working? -random failures- (Dec 2009)

#
# Defaults:
#

PATH=/bin:/usr/bin:/bin:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/etc:/usr/local/bin
LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH
PATH=$PATH:/usr/local/bin/X11
PATH=$PATH:/usr/sfw/bin
PATH=$PATH:/usr/bsd
export PATH

AGENT=Mozilla/5.0

# DISPLAYAPP file.png
DISPLAYAPP=xv
VERBOSE=-nv

if type $DISPLAYAPP > /dev/null 2>&1
then
	:
else
	DISPLAYAPP=display
fi

htd()
{
	perl -pe 's/\%([A-Fa-f0-9]{2})/pack("C", hex($1))/seg;'
}
#
#
#

ECHO="echo"
ECHON="echo"

case `uname` in
	OSF*)
		CMD_ENV=bsd; export CMD_ENV
		ECHO="echo -e"
		ECHON="/bin/echo"
		;;
	Darwin*|Linux*)
		ECHO="echo -e"
		ECHON="/bin/echo"
		;;
	*)
		[ -x /usr/ucb/echo ] && ECHO="/usr/ucb/echo"
		ECHON=$ECHO
		;;
esac

SED=sed

if [ -x /usr/local/bin/sed ]
then
	SED=/usr/local/bin/sed
fi


trap "on_exit" 0 1 2 3 15

TMPHTML=./foo.$$.html
TMPPNG=./foo.$$.png

on_exit()
{
	rm -f $TMPHTML $TMPPNG
	date
	exit
}

for f in $TMPHTML $TMPPNG
do
	test -f $f && (echo Please, delete $f first; exit 1)
done

URL="$1"

if [ -z "$URL" ]
then
	echo "Please, input URL"
	read URL
fi

if [ -z "$URL" ]
then
	echo use: $0 http://www.zshare.net/foo
	exit 1
fi


wget $VERBOSE -O - "$URL" > $TMPHTML

FILE=`basename $URL|$SED -e 's/\.html//'`

if fgrep "Error 404" $TMPHTML
then
	echo "#### Probably deleted"
	rm $TMPHTML
	exit 1
fi

FILE=`$SED -e '/<h2>Download:/!d' -e '/<h2>Download:/s/^.*Download:[ ]*//' -e 's/>.*$//' $TMPHTML`


wget $VERBOSE -O - --referer=$URL --post-data="referer2=$URL&download=1" \
	$URL > $TMPHTML


SLEEPSECONDS=`$SED -e '/|here|/!d' -e '/|here|/s/.*here|//' -e 's/|.*//' $TMPHTML`

#### Cheat?
# SLEEPSECONDS=5

SLEEPMINUTES=`echo "${SLEEPSECONDS}/60"|bc`
SLEEPSECONDSREST=`echo "${SLEEPSECONDS}%60"|bc`

echo "#### Should sleep $SLEEPMINUTES minutes ($SLEEPSECONDS seconds)"

SLEEP=`echo $SLEEPMINUTES | sed -e 's/\..*//'`
if [ `echo "${SLEEPSECONDS}%60"|bc` -gt 0 ]
then
	SLEEP=`expr $SLEEP + 1`
fi

SLEEPEND=60

if [ $SLEEPMINUTES -lt 1 ]
then
	SLEEPEND=$SLEEPSECONDS
fi

echo "#### Will sleep $SLEEPMINUTES:$SLEEPSECONDSREST minutes"


echo "sleeping"
echo "------------------------------------------------------------"
z=0
while [ $z -lt $SLEEPEND ]
do
	sleep $SLEEP
	$ECHON -n "."
	z=`expr $z + 1`
done
echo


LINK=`$SED -e '/var link_enc/!d' -e "/var link_enc/s/.*Array('//" -e "s/');.*//" -e "s/','//g" $TMPHTML`

echo "#### Link: $LINK"
cp $TMPHTML debug-zs.html

ERROR=false

wget $VERBOSE \
	--user-agent=$AGENT \
	--referer=$URL \
	$LINK


if $ERROR
then
	echo "####"
	echo "#### ERROR: Failed on `hostname`"
	echo "####"
else
	echo "####"
	echo "#### OK: `du -sk "$FILE"` on `hostname`"
	echo "####"
fi
on_exit


