#!/bin/sh

V_D=$HOME/.vnc
V_P=$V_D/passwd
V_NAME=demo
V_SHAREDPW=shared
V_ACCESSPW=access
V_T_START=$V_D/tempstart
CONTROL=""
test -r "$HOME/.VNCRC" && . "$HOME/.VNCRC"

mkdir -p $V_D
test -r $V_P || {
echo "$V_ACCESSPW" | vncpasswd -f
echo "$V_SHAREDPW" | vncpasswd -f
} > $V_P && chmod 700 $V_P

W=$(xwininfo -root | awk '/Width:/{print $2}')
H=$(xwininfo -root | awk '/Height:/{print $2}')

GR=32
SH=$(((H*10/11/GR+1)*GR))
SW=$(((W*10/21/GR+1)*GR))
GEOMETRY="$SW"x"$SH"

TMPARGS=$(getopt -o 'g:s:vc' --long 'geometry,size:,view,control' -n "VNCSERVER" -- "$@") || exit $?
eval set -- "$TMPARGS"
unset TMPARGS

# TODO --help
while true; do
  case "$1" in
    -g|--geometry) GEOMETRY="$2"; shift ;;
    -s|--size) SW=$((W*$2)); SH=$((H*$2)); GEOMETRY="$SW"x"$SH"; shift ;;
    -v|--view) CONTROL="$V_SHAREDPW" ;;
    -c|--control) CONTROL="$V_ACCESSPW";;
    --|-) shift ; break ;;
    *) break ;;
  esac
  shift
done

if [ $# -gt 0 ]; then
  # TODO
  printf "%s\n" "$*" > $V_T_START
  chmod +x $V_T_START
  VNCXSTARTUP="$V_T_START"
else
  VNCXSTARTUP=$(dirname "$0")/"VNCXSTARTUP"
  test -x "$VNCXSTARTUP" || VNCXSTARTUP="/usr/bin/VNCXSTARTUP"
fi

V_ID="`vncserver -xstartup $VNCXSTARTUP -autokill -geometry $GEOMETRY -name $V_NAME-$V_SHAREDPW -BlacklistThreshold 30 2>&1 | grep '^New'`"

RMFLAG="$V_D/${V_ID##* }.pid"
PORT="${V_ID##*:}"
yad --notification --text="$V_ID" --no-middle \
        --menu="Connect!VNCVIEWER localhost :$PORT $CONTROL|Exit!vncserver -kill :$PORT" \
        --command="VNCVIEWER localhost :$PORT $CONTROL" --image VNCVIEWER &
YADPID="$!"
case "$CONTROL" in
#  "") yad --title "Доска запущена" --text "$V_ID" ;;
  *) VNCVIEWER localhost ":$PORT" "$CONTROL" ;;
esac
inotifywait -e delete "$RMFLAG" ||:
kill "$YADPID"

