#! /bin/ash
# $Id: vfjuggle,v 1.6 2002/10/31 20:21:35 malekith Exp $
#
# based on original vfjuggle from poldek distribution
#
# Enviroment: 
# VF_MNTPOINT - the default is /src
# VF_MNTDEV   - the default is empty
# VF_EJECT    - e.g. VF_EJECT="ziptool -e /dev/zip", 
#                    VF_EJECT="cdeject -d $VF_MNTDEV"

cdid() 
{
    URI=`echo $1 | sed 's@^cdrom://@@'`
    CDID=`echo $URI | sed 's@/.*@@'`
    URI=`echo $URI | sed 's@[^/]*/@@'`
    BN=`basename $URI`
    
    #echo "$1 -> uri $URI, id $CDID"
    if [ -z "$URI" -o -z "$CDID" ]; then
	echo "$1: URL syntax error"
	exit 1
    fi
}

mount_()
{
    local id=$1
    local cddev
    local ans

    if [ -f "$VF_MNTPOINT/$id" ]; then
	return 0
    fi

    # check what is the cdrom device
    VF_MNTDEV=`grep " $VF_MNTPOINT" /proc/mounts | sed 's/ .*//'`
    if test -z "$VF_MNTDEV"; then
	echo "No cd already mounted - giving up!!!"
	exit 1
    fi

    #$VF_MOUNT -t iso9660 $VF_MNTDEV $VF_MNTPOINT 2>/dev/null 
    #if [ -f "$VF_MNTPOINT/$id" ]; then
    #	return 0
    #fi
	    
    while true; do
	echo "Umounting $id $VF_MNTPOINT/$id $VF_MNTPOINT..."
	$VF_UMOUNT $VF_MNTPOINT
	
	if [ -n "$VF_EJECT" ]; then
	    "$VF_EJECT"
	fi    

	dml <<EOF 
	    ${extra_message:+<br>}$extra_message
	    <br>`nls "Please insert %s disk" "$id"`
	    <meta title="$(nls "Disk change")">
	    <br>`nls "(I need '%s')" "$URI"`
	    <br><button>
EOF

	echo "Mounting $VF_MNTDEV $VF_MNTPOINT..."
	$VF_MOUNT -t iso9660 $VF_MNTDEV $VF_MNTPOINT -o ro
	local rc=$?

	if [ -f "$VF_MNTPOINT/$id" ]; then
	    return 0
	elif [ $rc -eq 0 ]; then
	    extra_message=$(nls "Not a %s disk" "$id")
	else
	    extra_message=$(nls "Disk mounting problem, try again")
	fi    
    done
}

usage()
{
    echo "usage: `basename $0` DESTDIR [cdrom://DISK_ID_FILE/PATH...]"
}


#
# main 
# 

if [ -f ~/.vfjugglerc ]; then
  . ~/.vfjugglerc
fi

#PATH="/bin:/usr/bin:/usr/sbin:/sbin"
# need nls
. installer-functions


VF_MNTPOINT=${VF_MNTPOINT:-"/src"}
if [ ! -d "$VF_MNTPOINT" ]; then
    echo "$VF_MNTPOINT: no such directory"
    exit 1
fi

if [ -n "$VF_MNTDEV" ]; then #   by default run mount $VF_MNTPOINT only 
    if [ ! -b "$VF_MNTDEV" ]; then
	echo "$VF_MNTDEV: no such device"
	exit 1
    fi
fi

VF_MOUNT=${VF_MOUNT:-"mount"}
VF_UMOUNT=${VF_UMOUNT:-"umount"}

if [ "$#" = 0 ]; then
    usage
    exit 0
fi


DESTDIR=$1; shift;
if [ ! -d "$DESTDIR" ]; then 
    echo "$DESTDIR: no such directory"
    exit 1
fi


while  [ $# -gt 0 ]; do
    URL=$1; shift;

    cdid $URL

    if [ ! -f "$VF_MNTPOINT/$CDID" ]; then 
	mount_ $CDID
    fi

    if [ ! -f "$VF_MNTPOINT/$URI" ]; then
	echo "$VF_MNTPOINT/$URI: no such file"
	exit 1
    fi
   
    case "$BN" in
    packages.dir* | Packages* )
         cp $VF_MNTPOINT/$URI $DESTDIR/
	 ;;
    *)
	 ln -sf "$VF_MNTPOINT/$URI" "$DESTDIR/$FILE"
	 ;;
    esac
	
    if [ $? -ne 0 ]; then
	exit 1
    fi
done

exit 0
    
