#!/bin/sh




Dots() {
    local i
    i=0
    while [ "$i" -le "$1" ] ; do
	echo -n "."
	i=$(($i+2))
    done
}


GetSizeOfFile() {
    if [ -f "$1" ] ; then
	echo `du -sk "$1" | cut -f1`
    elif [ ! -d "$1 " ] ; then
	echo 0
    else
	echo 1
    fi
}




IsThisTheLastCD() {
    if [ -f "/mnt/cdrom/archives/NOT-THE-LAST" ] ; then
	echo "no"
    else
	echo "yes"
    fi
}




RestoreTarballs() {
    local cd_number archive_list i noof_files current_fileno \
start_time end_time wildpath current_fileno percentage \
time_taken time_per minutes seconds outcome res logs retval
    cd_number=$1
    wildpath=$2
    insist-on-cd $cd_number
    retval=0
    archive_list=`find /mnt/cdrom/archives/*afio*`
    if [ "$?" -eq "0" ] ; then
	noof_files=`find /mnt/cdrom/archives/*afio* | grep -n "" | tail -n 1 | cut -d':' -f1`
	current_fileno=0
	start_time=`date +%s`
	for archive in $archive_list ; do
	    current_fileno=$(($current_fileno+1))
	    percentage=$(($current_fileno*100/$noof_files))
	    time_taken=$((`date +%s`-$start_time))
	    time_per=$(($time_taken*10/$current_fileno))
	    files_remaining=$(($noof_files-$current_fileno))
	    time_remaining=$(($time_per*$files_remaining/10))
	    if [ "$current_fileno" -le "2" ] ; then
		time_remaining="5999"
	    fi
	    minutes=$(($time_remaining/60))
	    seconds=$(($time_remaining%60))
	    if [ "$seconds" -lt "10" ] ; then
		seconds="0"$seconds
	    fi
	    echo -n -e "CD #$cd_number `Dots $percentage` $percentage% ("$minutes":"$seconds" remaining)\r"
#	    echo -n -e "CD #$cd_number `Dots $current_fileno` $percentage%\r"
	    untar-subroutine-me $archive "$wildpath" &> /tmp/rsm.log
	    outcome=$?
            retval=$(($retval+$outcome))
	    cat /tmp/rsm.log | grep -v "ignored" > /tmp/rsm.2.log
	    if [ "$outcome" -ne "0" ] ; then
		LogIt "Tar returned warnings/errors when extracting $archive." 3
		cat /tmp/rsm.2.log
	    fi
	done
	sync
        LogIt "Tarballs restored from CD #$cd_number." 3
    else
	noof_files=0
	LogIt "I could find no archives on this CD." 3
    fi
    echo "Time taken: $(($time_taken/60))m $(($time_taken%60))s"
    TOTAL_FILES=$(($TOTAL_FILES+$noof_files))
    return $retval
}



ThisCDsNumber() {
    if [ ! -f "/mnt/cdrom/archives/THIS-CD-NUMBER" ] ; then
        echo "(absent)"
    else
        cat /mnt/cdrom/archives/THIS-CD-NUMBER
    fi
}




# ------------------------- main ----------------------


LogIt "untar-me --- starting"


wildpath=""
if [ "$#" -eq "0" ] ; then
    LogIt "untar-me: restoring everything"
elif [ "$#" -eq "1" ] ; then
    wildpath=$1
    LogIt "untar-me: restoring wildpath $1"
else
    LogIt "untar-me <wildpath>" 1
    exit 1
fi

if [ "`mount | grep "/mnt/RESTORING"`" = "" ] ; then
    LogIt "\nPlease run mount-me before you run untar-me." 1
    exit 1
fi

echo -e -n "\r"

done="no"
cd_number=0
totalflaws=0
TOTAL_FILES=0
while [ "$done" != "yes" ] ; do
    cd_number=$(($cd_number+1))
    insist-on-cd $cd_number
    RestoreTarballs $cd_number "$wildpath"
    res=$?
    totalflaws=$(($totalflaws+$res))
    if [ "$res" -ne "0" ] ; then
        LogIt "Warning - CD #$cd_number's tarballs weren't restored completely." 1
    fi
    if [ "`IsThisTheLastCD`" = "yes" ] || [ "`find /mnt/cdrom/archives/slice* 2> /dev/null`" != "" ] ; then
        done="yes"
    fi
done
LogIt "Tarballs done."

LogIt "untar-me --- leaving (totalflaws=$totalflaws)"
[ "$totalflaws" -gt "0" ] && LogIt "Warning - errors occurred while tarballs were being processed." 1

exit $totalflaws
