#!/bin/sh
# rcrsn51 2012-07-14
#gettexted by esmourguit february 2013
#updated for Stretch-Live 2017-08-15
#updated for Buster-Live 2020-04-24

export TEXTDOMAIN=yassm
export OUTPUT_CHARSET=UTF-8

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

UMOUNT ()
{
for M in $(ls $MOUNTFOLDER); do
  umount $MOUNTFOLDER/$M
  rmdir $MOUNTFOLDER/$M
done
Xdialog --title "YASSM" --infobox "$(gettext 'All shares unmounted.')" 0 0 2000
}
export -f UMOUNT

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

MOUNTER ()
{
if [ "$1" = "select" ]; then
	SETFILE=$SETFOLDER/$SHARETITLE".set"
	. $SETFILE
	[ -n "$NETBIOS" ] && SERVER=$(nmblookup "$NETBIOS" | grep "^${SERVER%.*}" | awk '{print $1}')
else
	SHARETITLE="Test"	#and use on-screen field values
fi						

[ -z "$SERVER" ] && Xdialog --title "YASSM" --msgbox "$(gettext 'No server selected!')" 0 0 && exit
busybox ping -c 1 -W 2 "$SERVER"
[ $? -gt 0 ] && Xdialog --title "YASSM" --msgbox "$(eval_gettext 'Server $SERVER not found!')" 0 0 && exit

[ -z "$SHARE" ] && SHARE=$USERNAME
[ -z "$SHARE" ] && Xdialog --title "YASSM" --msgbox "$(gettext 'No share selected!')" 0 0 && exit

[ "$PASSWORD" = "***" ] && PASSWORD=$(Xdialog --stdout --no-cancel --title " " --password --inputbox "$(gettext 'Password')" 0 0)

[ -z "$USERNAME" ] && USERNAME="guest"
AUTH="-o username="$USERNAME
if [ -n "$PASSWORD" ]; then
  AUTH=$AUTH",password="$PASSWORD
else
  AUTH=$AUTH",guest"
fi

if [ -n "$OPTIONS" ]; then
  OPTIONS=$(echo -n $OPTIONS | tr -d " " | tr ";" ",")
  AUTH=$AUTH","$OPTIONS
fi

MYSHARE=$MOUNTFOLDER/$SHARETITLE
mkdir -p $MYSHARE
umount $MYSHARE > /dev/null 2>&1   #in case it's already mounted

mount.cifs //$SERVER/"$SHARE" $MYSHARE $AUTH

if [ $? -eq 0 -o $? -eq 16 ]; then
  $FILEMANAGER $MYSHARE
else
  Xdialog --title "YASSM" --msgbox "$(eval_gettext 'Could NOT mount $SHARE on $SERVER !\nDoes the share exist?\nDoes it need authentication?')" 0 0
fi
}
export -f MOUNTER

FINDSHARES ()
{
[ -z "$SERVER" ] && Xdialog --title "YASSM" --msgbox "$(gettext 'No server selected!')" 0 0 && exit
busybox ping -c1 -W2  "$SERVER"
[ $? -gt 0 ] && Xdialog --title "YASSM" --msgbox "$(eval_gettext 'Server $SERVER not found!')" 0 0 && exit

if [ -n "$USERNAME" -a -n "$PASSWORD" ]; then
	AUTHARG="-U $USERNAME%$PASSWORD"
else
	AUTHARG="-N"
fi

smbclient $AUTHARG -gL $SERVER 2>/dev/null | grep "Disk" | grep -v "$." | cut -d "|" -f 2 | Xdialog --no-cancel --title " " --textbox - 15 30
}
export -f FINDSHARES

SAVE ()
{
[ -z "$SERVER" ] && Xdialog --title "YASSM" --msgbox "$(gettext 'No server selected!')" 0 0 && exit

NEWTITLE=$(Xdialog --stdout --title "YASSM" --inputbox "$(gettext 'Give this share a unique name on the network.\neg. Freds-Music.')" 0 0)
[ -z "$NEWTITLE" ] && exit

SHARETITLE=$(echo -n $NEWTITLE | tr -d " /\<>|*?")	#strip out illegal characters
SETFILE=$SETFOLDER/$SHARETITLE".set"

cat > $SETFILE << EOF
USERNAME="$USERNAME"
PASSWORD="$PASSWORD"
SHARE="$SHARE"
SERVER="$SERVER"
OPTIONS="$OPTIONS"
NETBIOS=""
EOF

Xdialog --title "YASSM" --msgbox "$(gettext 'Restart YASSM to use the new share.')" 0 0 
}
export -f SAVE

NEW ()
{
export DIALOG2="
<window title=\"New Share\" icon-name=\"gtk-connect\">
  <vbox>
    <hbox>
      <text width-request=\"100\"><label>$(gettext 'Username')</label></text>
      <entry>
        <variable>USERNAME</variable>
      </entry>
    </hbox>
    <hbox>
      <text width-request=\"100\"><label>$(gettext 'Password')</label></text>
      <entry>
         <variable>PASSWORD</variable>
      </entry>
    </hbox>
    <hbox>
      <text  width-request=\"100\"><label>$(gettext 'Share')         </label></text>
      <entry>
        <variable>SHARE</variable>
      </entry>
    </hbox>
    <hbox>
      <text width-request=\"100\"><label>$(gettext 'Server')       </label></text>
      <entry>
        <variable>SERVER</variable>
      </entry>
    </hbox>
    <hbox>
      <text width-request=\"100\"><label>$(gettext 'Options')    </label></text>
      <entry>
        <variable>OPTIONS</variable>
				<default>vers=2.0</default>
      </entry>
    </hbox>
    <hbox>
       <button>
				<label>$(gettext 'Name')</label>
				<action>nmblookup -A \$SERVER 2>&1 | Xdialog --title \" \" --editbox - 15 100 &</action>
			</button>
       <button>
				<label>$(gettext 'Shares')</label>
				<action>FINDSHARES &</action>
			</button>
      <button>
				<label>$(gettext 'Test')</label>
				<action>MOUNTER test &</action>
			</button>
     	<button>
				<label>$(gettext 'Save')</label>
				<action>SAVE &</action>
			</button>
      <button>
				<label>$(gettext 'Quit')</label>
				<action>UMOUNT</action>
				<action>EXIT:Exit</action>
			</button>
    </hbox>
  </vbox>
</window>
"
gtkdialog -G +50+200 -p DIALOG2
}
export -f NEW

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

mkdir -p /etc/pwf #just in case
APPFILE=/etc/pwf/appfile
if [ ! -f $APPFILE ]; then
	echo "export TEXTEDITOR=defaulttexteditor" > $APPFILE
	echo "export FILEMANAGER=defaultfilemanager" >> $APPFILE
	echo "export WEBBROWSER=defaultbrowser" >> $APPFILE
	echo "export IMAGEVIEWER=defaultimageviewer" >> $APPFILE
fi
. $APPFILE

SETFOLDER=$HOME/.yassm
mkdir -p $SETFOLDER
export SETFOLDER

MOUNTFOLDER=$HOME/YASSM
mkdir -p $MOUNTFOLDER
export MOUNTFOLDER

SHARELIST=""
for S in $(ls $SETFOLDER/*.set 2>/dev/null); do
  SHARELIST=$SHARELIST"<item>"$(basename "$S" .set)"</item>"
done
[ -z "$SHARELIST" ] && SHARELIST="<item>None</item>" 

export DIALOG="
<window title=\"YASSM v4.8\" icon-name=\"gtk-connect\">
<vbox>
  <frame $(gettext 'Shares')>
    <hbox>
     <comboboxtext width-request=\"240\">
       <variable>SHARETITLE</variable>
       $SHARELIST
     </comboboxtext>
     <button>
       <label>$(gettext 'New')</label>
       <action>NEW &</action>
     </button>
     <button>
       <label>$(gettext 'Edit')</label>
       <action>$FILEMANAGER $SETFOLDER &</action>
     </button>
     <button>
       <label>$(gettext 'Mount')</label>
       <action>MOUNTER select &</action>
     </button>
    </hbox>
  </frame>
  <hbox>
     <button>
       <label>$(gettext 'Help')</label>
       <action>HELP</action>
     </button>
     <text><label>\" \"</label></text>
     <button>
       <label>$(gettext 'PeasyPort')</label>
       <action>peasyport &</action>
     </button>
     <button>
       <label>$(gettext 'Unmount')</label>
       <action>UMOUNT</action>
     </button>
     <button>
       <label>$(gettext 'Show')</label>
       <action>$FILEMANAGER $MOUNTFOLDER</action>
     </button>
     <button><label>$(gettext 'Restart')</label></button>
     <button><label>$(gettext 'Quit')</label></button>
  </hbox>
</vbox>
</window>
"
eval $(gtkdialog -G +50+50 -p DIALOG | grep EXIT)
[ "$EXIT" = "$(gettext 'Restart')" ] && exec $0
