#!/bin/sh

export TEXTDOMAIN=peasyscan
export OUTPUT_CHARSET=UTF-8

eval_gettext () {
  local myMESSAGE=$(gettext "$1")
  eval echo -n \"$myMESSAGE\"
}
export -f eval_gettext

if [ "$F4" = "true" ]; then
  Xdialog --title " " --msgbox "$(gettext 'Select JPG, PNG or PDF!')" 0 0
  exit
fi

if [ -z "$SAVEFILENAME" ]; then
  Xdialog --title " " --msgbox "$(gettext 'No Save file selected!')" 0 0 
  exit
fi

echo $SAVEFILENAME | grep -q " "
if [ $? -eq 0 ]; then
  Xdialog --title " " --msgbox "$(gettext 'The filename cannot contain spaces!')" 0 0 
  exit
fi

ADFINFO=$(Xdialog --stdout --title " " --3inputs "$(gettext 'ADF Scan Details')" 0 0 "$(gettext 'Number of sheets in the feeder:')" 1 "$(gettext 'Start numbering the pages at:')" 1 "$(gettext 'Increase each page number by:')" 1)
[ $? -gt 0 ] && exit

COUNT=`echo -n $ADFINFO | cut -d "/" -f 1`
FIRST=`echo -n $ADFINFO | cut -d "/" -f 2`
INC=`echo -n $ADFINFO | cut -d "/" -f 3`

Xdialog --title " " --yesno "$(eval_gettext 'Are you sure there are $COUNT sheets in the feeder?')" 0 0
[ $? -eq 1 ] && exit

Xdialog --ok-label Yes --cancel-label No --title " " --yesno "$(gettext 'Do you want to pause between scans?')" 0 0 
PAUSEFLAG=$?

if [ -n "$SOURCE" ]; then
  SOURCEPAR="--source"; SOURCE=\"$SOURCE\"
else
  SOURCEPAR=""
fi

if [ -n "$MODE" ]; then
  MODEPAR="--mode"; MODE=\"$MODE\"
else
  MODEPAR=""
fi

if [ -n "$RESOLUTION" ]; then
  RESOLUTIONPAR="--resolution"; RESOLUTION=\"$RESOLUTION\"
else
  RESOLUTIONPAR=""
fi

URI=\"$URI\"

[ -z "$PAPER" ] && PAPER="letter"

# OTHER contains optional parameters - use with care

SDIM=""		          #scanner dimensions
PDIM=""				  #PDF dimensions

case $PAPER in
  letter|Letter) SDIM="-x 215 -y 278" 
                 PDIM="letter"
                 ;;
  legal|Legal) SDIM="-x 215 -y 355"
               PDIM="legal"
               ;;
  A4|a4) SDIM="-x 210 -y 296"
         PDIM="A4"
         ;;
  *) SDIM=$PAPER
     PDIM="letter"
     ;;
esac

rm -f /tmp/out*.pnm  #delete any previous scans

if [ $PAUSEFLAG -eq 0 ]; then 
  for ((I=$FIRST, J=1; J<=$COUNT; I+=$INC, J++)); do
    Xdialog --ok-label OK --title " " --msgbox "$(gettext 'Click OK to scan')" 0 0
    eval "scanimage -v -d $URI --format=pnm --batch=\"/tmp/out%d.pnm\" --batch-count=1 --batch-start=$I --batch-increment=1 $SOURCEPAR $SOURCE $MODEPAR $MODE $RESOLUTIONPAR $RESOLUTION $SDIM $OTHER"
  done
else
  eval "scanimage -v -d $URI --format=pnm --batch=\"/tmp/out%d.pnm\" --batch-count=$COUNT --batch-start=$FIRST --batch-increment=$INC $SOURCEPAR $SOURCE $MODEPAR $MODE $RESOLUTIONPAR $RESOLUTION $SDIM $OTHER"
fi

if [ ! -f /tmp/out${FIRST}.pnm ]; then
  Xdialog --title " " --msgbox "$(gettext 'ADF scan failed - check your options!')" 0 0 
  exit
fi

if [ "$F1" = "true" ]; then
  EXT=".png"
elif [ "$F2" = "true" ]; then
  EXT=".jpg"
elif [ "$F3" = "true" ]; then
  EXT=".pdf"
fi

for F in /tmp/out*.pnm 
do
  I=${F#/tmp/out}; I=${I%.pnm}; I=`printf %2.2d $I`
  DESTNAME=$SAVEFILENAME"-"$I$EXT
  if [ -f "$DESTNAME" ]; then
    Xdialog --title " " --yesno "$(gettext 'File exists! Overwrite it?')" 0 0
    [ $? -eq 1 ] && exit
  fi
  touch "$DESTNAME" 2> /dev/null
  if [ $? -eq 1 ]; then
    Xdialog --title " " --msgbox "$(gettext 'Invalid filename!')" 0 0
    exit
  fi
 
  if [ "$EXT" = ".png" ]; then
    pnmtopng $F > $DESTNAME
  elif [ "$EXT" = ".jpg" ]; then
    pnmtojpeg $F > $DESTNAME
  elif [ "$EXT" = ".pdf" ]; then
    ppm2tiff $F /tmp/out.tif
    tiff2pdf -p $PDIM -o $DESTNAME /tmp/out.tif
    rm /tmp/out.tif
  fi
  rm $F
done

Xdialog --title " " --msgbox "$(eval_gettext 'Last page saved to $DESTNAME')" 0 0

if [ "$F3" = "true" ]; then
  Xdialog --title " " --yesno "$(gettext 'Combine into one PDF document?')" 0 0
  [ $? -eq 1 ] && exit
  gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=${SAVEFILENAME}-DOC.pdf $SAVEFILENAME-??.pdf
  SHORTNAME=`basename $SAVEFILENAME`"-DOC.pdf"
  Xdialog --title " " --msgbox "$(eval_gettext 'Files combined as $SHORTNAME')" 0 0
fi
