#!/bin/sh
# rcrsn51 2012-07-14
#gettexted by esmourguit february 2013

export TEXTDOMAIN=yassm
export OUTPUT_CHARSET=UTF-8

DOSHOW () {
  [ -d $HOME/YASSM ] || mkdir $HOME/YASSM
  rox $HOME/YASSM
}
export -f DOSHOW

DOUMOUNT () {
  for M in $HOME/YASSM/*; do
    umount $M  > /dev/null 2>&1
    rmdir $M > /dev/null 2>&1
  done
  Xdialog --title "YASSM" --infobox "$(gettext 'All shares unmounted')" 0 0 2000
}
export -f DOUMOUNT

DOHELP () {
  defaultbrowser http://www.murga-linux.com/puppy/viewtopic.php?t=63090 &
}
export -f DOHELP

DOSELECT () {

. $SETFILE     # to get the list of options

SHARE=${LISTPICK%@*}
SERVER=${LISTPICK#*@}

rm $SETFILE
[ "$SHARE" = "hidden" ] && SHARE=""
for F in USER PASSWORD SHARE SERVER OPTIONS; do
  eval V=\$$F 
  if [ -n "$V" ]; then
    echo $F=\"$V\" >> $SETFILE
  else
    echo $F=\"\" >> $SETFILE
  fi
done
  
/usr/local/yassm/samba-login &

}
export -f DOSELECT

######################### End of Functions

YASSMDIR=$HOME/.config/yassm
[ -d $YASSMDIR ] || mkdir -p $YASSMDIR
export YASSMDIR

SETFILE=$YASSMDIR/samba-login.set
[ -f $SETFILE ] || cp /usr/local/yassm/samba-login.set $YASSMDIR
export SETFILE

SUBNETFILE=$YASSMDIR/samba-search.subnets	#to search other subnets

MYSUBNET=$(ifconfig | grep inet | grep -m 1 -v "127.0.0.1" | cut -d ":" -f 2 | cut -d "." -f 1-3)

if [ -z "$MYSUBNET" ]; then 
  Xdialog --title "YASSM" --msgbox "$(gettext 'No network detected!')" 0 0
  exit
else
  MYSUBNET=$MYSUBNET".0"
fi

Xdialog --title "YASSM" --msgbox "$(gettext 'Scanning for shares ...')" 0 0 &
MSGPID=$!

SUBNETLIST=$MYSUBNET
[ -f "$SUBNETFILE" ] && SUBNETLIST=${SUBNETLIST}" "$(cat $SUBNETFILE)

TIMEOUT=1
PORT=139

IPLIST=""
for SUBNET in $SUBNETLIST; do
  PREFIX=${SUBNET%.*}
  IPLIST=${IPLIST}" "$(mpscan -t $TIMEOUT -p $PORT ${PREFIX}.1 - ${PREFIX}.254 | cut -d " " -f 2)
done

SHARELIST=""
for ONEIP in $IPLIST; do
  if [ "${ONEIP%.*}" = "${MYSUBNET%.*}" ]; then
    ONESERVER=$(nmblookup -A $ONEIP | grep "<20>" | tr -d "\t" | cut -d " " -f 1)
  else
    ONESERVER=$ONEIP
  fi
  SHARES=$(smbclient -gNL $ONEIP 2> /dev/null | grep "Disk" | grep -v "$." | cut -d "|" -f 2 | tr -s " " ".")
  if [ -z "$SHARES" ]; then
    SHARELIST=${SHARELIST}" ""hidden@"${ONESERVER}
  else
    for ONESHARE in $SHARES; do
      SHARELIST=${SHARELIST}" "${ONESHARE}"@"${ONESERVER}
    done
  fi
done

kill $MSGPID

LISTITEMS=""
for I in $SHARELIST; do
  LISTITEMS=$LISTITEMS"<item>"$I"</item>"
done

export DIALOG="
<window title=\"YASSM v2.6\" icon-name=\"gtk-connect\">
<vbox>
  <frame $(gettext 'Shares')>
    <hbox>
     <combobox>
       <variable>LISTPICK</variable>
       $LISTITEMS
     </combobox>
     <button>
       <label>$(gettext 'Select')</label>
       <action>DOSELECT</action>
     </button>
     <button><label>$(gettext 'Quit')</label></button>
    </hbox>
  </frame>
  <hbox>
     <button>
       <label>$(gettext 'Help')</label>
       <action>DOHELP</action>
     </button>
     <text><label>\"  \"</label></text>
     <button>
       <label>$(gettext 'Wake')</label>
     </button>
     <button>
       <label>$(gettext 'Rescan')</label>
     </button>
     <button>
       <label>$(gettext 'Unmount')</label>
       <action>DOUMOUNT</action>
     </button>
     <button>
       <label>$(gettext 'Show')</label>
       <action>DOSHOW</action>
     </button>
  </hbox>
</vbox>
</window>
"

I=$IFS; IFS=""
for STATEMENTS in  $(gtkdialog3 -c --program DIALOG); do
  eval $STATEMENTS
done
IFS=$I

[ "$EXIT" = "$(gettext 'Rescan')" ] && exec $0

if [ "$EXIT" = "$(gettext 'Wake')" ]; then
  Xdialog --title "YASSM" --msgbox "$(gettext 'Waking the network ...')" 0 0 &
  MSGPID=$!
  sleep 1
  PREFIX=${MYSUBNET%.*}
  for IP in {1..254}; do
    mpscan -t $TIMEOUT -p $PORT ${PREFIX}.$IP > /dev/null 2>&1 &
  done
  sleep 3
  kill $MSGPID
  exec $0
fi
