#!/bin/sh

alterator_api_version=1
. alterator-sh-functions


IMG_DIR=
MOUNTED=
INSTALL="no"
LIVE="no"
RESCUE="no"
MEMTEST="no"

find_image(){
	IMG_DIR=
	mount /media/cdrom &>/dev/null && MOUNTED='yes' ||:
	[ -d /media/cdrom/syslinux ] && IMG_DIR='/media/cdrom'
	[ -d /image/syslinux ] && IMG_DIR='/image'
	echo $IMG_DIR

}

on_read(){
   IMG_DIR=`find_image`
   if [ -n "$IMG_DIR" ] ; 
   then
	   [ -f $IMG_DIR/altinst ] && INSTALL='yes'
	   [ -f $IMG_DIR/live ] && LIVE='yes'
	   [ -f $IMG_DIR/rescue ] && RESCUE='yes'
	   [ -f $IMG_DIR/syslinux/memtest ] && MEMTEST='yes'
   fi
	   write_string_param "install_ok" "$INSTALL"
	   write_string_param "live_ok" "$LIVE"
	   write_string_param "rescue_ok" "$RESCUE"
	   write_string_param "memtest_ok" "$MEMTEST"

	   write_string_param "img_dir" "$IMG_DIR"
}

on_write(){
  write_debug "writing...\n"
  options="-M"

  [ $in_rescue = '#t' ] && options="$options -r"
  [ $in_live = '#t' ] && options="$options -l"
  [ $in_memtest = '#t' ] && options="$options -m"
  [ $in_install = '#t' ] && options="$options -i"

  /usr/sbin/mkbootflash $options -p $in_img_dir $in_device
  [ -n "$MOUNTED" ] && umount /media/cdrom &>/dev/null ||:
}

on_list(){
	hal-find-by-property --key storage.bus --string usb | 
	  while read udi; do
		   vendor=`hal-get-property --udi $udi --key info.vendor`
		   product=`hal-get-property --udi $udi --key info.product`
		   is_volume=`hal-get-property --udi $udi --key block.is_volume`
		   device=`hal-get-property --udi $udi --key block.device`
		   if [ "$is_volume" = "false" ]; then
			   hal-find-by-property --key info.parent --string $udi |
			   while read part_udi; do
				   partition=`hal-get-property --udi $part_udi --key block.device`;
				   write_enum_item "$partition" "$partition ($vendor $product)";
				   done
		   else
			   write_enum_item "$device" "$device ($vendor $product)";
		   fi
	  done
}

on_message() {
  case "$in_action" in
    read)  on_read ;;
    write) on_write ;;
    list) on_list;;
  esac
}

message_loop
