#! /bin/sh

. $TS_GLOBAL

  DISKMNT="/mnt/disc/hda"
  PARTITION_LIST="1 2 3 4"
  let progress=0
  let splash_total=20

  if [ -n "$DEBUG_NETWORK" ] ; then
          debug="-d"
  fi

case "$1" in  
init)
    if ! pkg_initialized $PACKAGE; then

      echo_log "\n\nStarting hdupdate" $debug
      HDUPDATE_ENABLED=`make_caps ${HDUPDATE_ENABLED}`
      if [ "${HDUPDATE_ENABLED}" = "Y" ] ; then
        echo_log "HDUpdate is enabled" $debug
      else
        echo_log "HDUpdate is disabled" $debug
        exit 0
      fi

      HDUPDATE_FORCE=`make_caps ${HDUPDATE_FORCE}`
      HDUPDATE_SERVER_VERSION=`make_caps ${HDUPDATE_SERVER_VERSION}`
      HDUPDATE_WS_VERSION=`make_caps ${HDUPDATE_WS_VERSION}`

      if [ "${HDUPDATE_SERVER_VERSION}" = "${HDUPDATE_WS_VERSION}" ] ; then
        # The version is the same
        echo_log "No update needed">>  $debug
        if [ "${HDUPDATE_FORCE}" = "Y" ] ; then
        # We want to force update so continue
          echo_log "Forced update is set" $debug
        else
        # We do not want to force update so quit
          echo_log "Forced update is not set" $debug
          exit 0
        fi
      fi

# version is not the same, so HDUPDATE_SERVER, HDUPDATE_FILES,
# and HDUPDATE_PATH better have good values

      echo_log "Updating local Thinstation install from ${HDUPDATE_SERVER}" $debug
      echo_log "  Current version: ${HDUPDATE_WS_VERSION}" $debug
      echo_log "  New version:     ${HDUPDATE_SERVER_VERSION}" $debug

# Search local hard ide disk for existing vmlinuz
      HDTARGET="NONE"
      for CURRENT_PART in ${PARTITION_LIST}
      do
        HDCHECK="${DISKMNT}/part${CURRENT_PART}"
        echo_log "Checking for vmlinuz on ${HDCHECK}"
        if [ -e ${HDCHECK}/vmlinuz ] ; then
          echo_log "vmlinuz found at ${HDCHECK}"
          HDTARGET="${HDCHECK}"
        fi
      done
      if [ "${HDTARGET}" = "NONE" ] ; then
        echo_log "Update failed, target drive not found\n" $debug
        exit 0
      fi 

# found the local file location
# now download to a temp location
      if [ ! -e ${HDTARGET}/tmp ] ; then
	mkdir ${HDTARGET}/tmp
      fi

# Determine temporary filesystem to use

      if [ "`make_caps $HDUPDATE_TEMP`" = "RAM" ] ; then
        	TEMPPATH="/tmp"
      else
        	TEMPPATH="${HDTARGET}/tmp"
      fi

# Added support for different file type uploads
      for CURFILE in ${HDUPDATE_FILES}
      do
        SOURCEFILE="${HDUPDATE_PATH}/${CURFILE}"
        TARGETFILE="${HDTARGET}/${CURFILE}"

        TEMPFILE="${TEMPPATH}/${CURFILE}"
	if [ -z "${HDUPDATE_SERVER_TYPE}" ] ; then
		HDUPDATE_SERVER_TYPE=TFTP
	fi

        echo_log "Downloading: ${TEMPFILE} from ${SOURCEFILE}" $debug
        case `make_caps ${HDUPDATE_SERVER_TYPE}` in
		TFTP)
        		TYPE_RETURN=0
        		( tftp -g -l ${TEMPFILE} -r ${SOURCEFILE} ${HDUPDATE_SERVER} ; echo $? > /tmp/return ) &
			while pidof tftp > /dev/null; do
				echo_log "." -n $debug
				let progress=progress+1
				if [ "$progress" -gt "$splash_total" ] ; then
					let progress=0
				fi
				splash_progress $progress
				sleep 1
				fbtruetype "Updating Image, Do not turn off PC!!"
			done
			echo_log "." $debug
			sleep 1
			if [ -e /tmp/return ] ; then
        		  	TYPE_RETURN=`cat /tmp/return`
				rm /tmp/return
			else
        		  	TYPE_RETURN=1
			fi	  
		;;
		SCP)
        		TYPE_RETURN=0
			if [ -z "$HDUPDATE_USER" ] ; then
			  echo_log "No SCP username specified error!"  $debug
        		  exit 1
			else
			  ( scp -CB ${HDUPDATE_USER}@${HDUPDATE_SERVER}:${SOURCEFILE} ${TEMPFILE} ; echo $? > /tmp/return ) &
			  while pidof scp > /dev/null; do
				echo_log "." -n $debug
				let progress=progress+1
				if [ "$progress" -gt "$splash_total" ] ; then
					let progress=0
				fi
				splash_progress $progress
				sleep 1
				fbtruetype "Updating Image, Do not turn off PC!!"
			  done
			  echo_log "." $debug
			  sleep 1
			  if [ -e /tmp/return ] ; then
        		  	TYPE_RETURN=`cat /tmp/return`
			  	rm /tmp/return
			  else
        		  	TYPE_RETURN=1
			  fi	  
			fi
		;;
		WGET)
		        TYPE_RETURN=0
			( wget -P ${TEMPFILE} ${HDUPDATE_SERVER}/${SOURCEFILE} ; echo $? > /tmp/return ) &
			while pidof wget > /dev/null; do
				echo_log "." -n $debug
				let progress=progress+1
					if [ "$progress" -gt "$splash_total" ] ; then
				let progress=0
				fi
				splash_progress $progress
				sleep 1
				fbtruetype "Updating Image, Do not turn off PC!!"
			done
			echo_log "." $debug
			sleep 1
			if [ -e /tmp/return ] ; then
				TYPE_RETURN=`cat /tmp/return`
				rm /tmp/return
			else
				TYPE_RETURN=1
			fi	  
		;;
		*)
			echo_log "Invalid Server Type specified"  $debug
        		exit 1
		;;
        esac
        echo_log "$HDUPDATE_SERVER_TYPE returns: $TYPE_RETURN"
        if [ $TYPE_RETURN -eq 0 ] ; then
          echo_log "${SOURCEFILE} download succeeded" $debug
        else
          echo_log "${SOURCEFILE} download failed" $debug
          echo_log "Update failed to copy some files\n" $debug
          exit $TYPE_RETURN
        fi
      done

# Install the new files
      for CURFILE in ${HDUPDATE_FILES}
      do
        TARGETFILE="${HDTARGET}/${CURFILE}"
        TEMPFILE="${TEMPPATH}/${CURFILE}"
        echo_log "Installing: ${TARGETFILE} from ${TEMPFILE}" $debug
        cp ${TEMPFILE} ${TARGETFILE}
        sync
        rm ${TEMPFILE}
        sync
      done
      echo_log "Files installed" $debug

# Delete files in delete list
      for CURFILE in ${HDUPDATE_DELETE}
      do
        TARGETFILE="${HDTARGET}/${CURFILE}"
        echo_log "Removing: ${TARGETFILE}" $debug
        rm ${TARGETFILE}
      done

      echo_log "Update completed\n" $debug
      sync

      pkg_set_init_flag $PACKAGE
    fi
          ;;
help)
    echo "Usage: $0 init"
    ;;
*)
    exit 1
    ;;
esac

exit 0
