#!/bin/sh
# rcrsn51 2012-07-14
#gettexted by esmourguit february 2013
#updated 2015-01-17

if [ -z $(which peasyport) ]; then
  Xdialog --title "YASSM" --msgbox "$(gettext 'This program needs PeasyPort!')" 0 0
  exit
fi 

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 $(ls $HOME/YASSM); do
    rox -D $HOME/YASSM/$M
    umount $HOME/YASSM/$M
    rmdir $HOME/YASSM/$M
  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=$(grep $LISTPICK $SHARELISTFILE | cut -d "@" -f 1)
[ "$SHARE" = "hidden" ] && SHARE=""
SERVER=$(grep $LISTPICK $SHARELISTFILE | cut -d "?" -f 2)

rm $SETFILE
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/yassm-login &

}
export -f DOSELECT

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

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

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

export SHARELISTFILE=/tmp/sharelist.dat

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

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

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

pnscan -t 500 -v ${SUBNET}.1:${SUBNET}.254 139 > /tmp/yassm-search.txt 2>&1
IPLIST=$(grep -v -E "refused|connect|route" /tmp/yassm-search.txt | tr -s " " | cut -d " " -f 1)
sleep 1

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

kill $MSGPID

LISTITEMS=""
while read I; do
  LISTITEMS=$LISTITEMS"<item>"${I%\?*}"</item>"
done < $SHARELISTFILE 

export DIALOG="
<window title=\"YASSM v2.7\" icon-name=\"gtk-connect\">
<vbox>
  <frame $(gettext 'Shares')>
    <hbox>
     <combobox space-expand=\"true\" space-fill=\"true\">
       <variable>LISTPICK</variable>
       $LISTITEMS
     </combobox>
     <button>
       <label>$(gettext 'Select')</label>
       <action>DOSELECT</action>
     </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>
     <button><label>$(gettext 'Quit')</label></button>
  </hbox>
</vbox>
</window>
"

I=$IFS; IFS=""
for STATEMENTS in  $(gtkdialog3 -c -p 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=$!
  for IP in {1..254}; do
    ping -c1 ${SUBNET}.$IP > /dev/null 2>&1 &
  done
  sleep 5
  kill $MSGPID
  exec $0
fi

