#!/bin/sh

. /bin/shell-config

MAINCFG="/etc/thinner/global"

[ -r "$MAINCFG" ] && . "$MAINCFG"

[ "$#" -eq 3 ] || exit 1

SERVERS="$3"
USERNAME="$1"
PASSWORD="$2"

PRINTERS="yes"
FULLSCREEN="yes"
SPEED="adsl"
CLNTTYPE="unix"
DESKTYPE="console"
CONSOLE="default"
PRINTPROTO="smb"
NXTYPE="rxclient"

PROGRAM=${NXTYPE:-opennx}

[ -n "$SERVERS" ] || exit 1

#Perfomance
ADDITIONAL="0"
RENDER="true"
BACKINGSTORE="false"
COMPOSITE="false"
SHAREDMEM="false"
EMULSHPIX="false"
${PERFORMANCE:+ eval "ADDITIONAL=\"1\""}
${RENDEXT:+ eval "RENDER=\"false\""}
${BACSEXT:+ eval "BACKINGSTORE=\"true\""}
${COMPEXT:+ eval "COMPOSITE=\"true\""}
${SMEMEXT:+ eval "SHAREDMEM=\"true\""}
${EMULEXT:+ eval "EMULSHPIX=\"true\""}

#Global variable for printers
PRINTER=

#Global variable for storage
STORAGESHARE=

#Global variable for printers count
SHARECNT=

#Global variable for default printer in xml
DEFPRINTNUM=

#Global variable for default printer line in xml
DEFAULTPRINTER=

#Global variable for shares count
count=0

[ -n "$PRINTPROTO" ] || PRINTPROTO="smb"

#Printers detect and configure function
printers(){
[ "$PRINTPROTO" = "smb" ] || allowprint="true"
[ "$PRINTPROTO" != "smb" ] || allowshares="true"
#Default printer name
DEFPRINTER=`LANG=C lpstat -d 2>/dev/null |cut -d: -f2 |xargs`
#List all printers names
ALLPRINTERS=`LANG=C lpstat -v 2>/dev/null | cut -d: -f1 | cut -d" " -f3`

#Loop for all printers
for print in $ALLPRINTERS; do

#Default printer
value=false
#If this printer = default printer, then save default printer's count value and value=true, for default printer in xml
[ "$DEFPRINTER" = "$print" ] && {
	value=true
	DEFPRINTNUM=$count
}

#XML config for nxclient
PRINTER="${PRINTER}<group name=\"Share$count\" >\n\
<option key=\"Default\" value=\"$value\" />\n\
<option key=\"Driver\" value=\"NULL\" />\n\
<option key=\"Password\" value=\"\" />\n\
<option key=\"Public\" value=\"false\" />\n\
<option key=\"Sharename\" value=\"$print\" />\n\
<option key=\"Type\" value=\"${PRINTPROTO}printer\" />\n\
<option key=\"Username\" value=\"$USER\" />\n\
</group>"

SHARECNT="${SHARECNT}<option key=\"Share$count\" value=\"Share$count\" />\n"
DEFAULTPRINTER="<option key=\"default printer\" value=\"Share$DEFPRINTNUM\" />"

#Shares count + 1
count=$((count + 1))

done
}

storage()
{
allowshares="true"
STORAGESHARE="<group name=\"Share$count\" >\n\
<option key=\"Alias\" value=\"\$(SHARES)/media\" />\n\
<option key=\"Password\" value=\"\" />\n\
<option key=\"Sharename\" value=\"media\" />\n\
<option key=\"Type\" value=\"disk\" />\n\
<option key=\"Username\" value=\"$USER\" />\n\
</group>"

SHARECNT="${SHARECNT}<option key=\"Share$count\" value=\"Share$count\" />\n"

#Shares count + 1
count=$((count + 1))
}

#If global variable STORAGE enable, run function 'storage'
allowshares="false"
${STORAGE:+ storage}
#If global variable PRINTERS enable, run function 'printers'
allowprint="false"
${PRINTERS:+ printers}

[ -z "$PASSWORD" ] || NXPASSWORD=`/usr/bin/nxscramble "$PASSWORD" | sed -e 's,[&\],\\\\&,g'`

mkdir -p "$HOME"/.nx/config/
[ -L "$HOME"/.nx/config/nxclient.cfg ] || ln -sf "/etc/thinner/nxclient.cfg" "$HOME"/.nx/config/
[ -L "$HOME"/.opennx ] || ln -sf "/etc/thinner/opennx.cfg" "$HOME"/.opennx

for server in `echo $SERVERS | tr ';' ' '`; do

AUDIO="false"
[ "$SOUND" != "1" ] || AUDIO="true"

session="${TMPDIR:-/tmp}/$server.nxs"
cp -f /etc/thinner/template.nxs "$session"
sed "s,CLIENTTYPE,$CLNTTYPE,; \
s,SPEED,$SPEED,; \
s,DESKTOPTYPE,$DESKTYPE,; \
s,HOST,$server,; \
s,CONSOLE,$CONSOLE,; \
s,FILE,$FILE,; \
s,USER,$USERNAME,; \
s<PASSWORD<$NXPASSWORD<; \
s,COUNT,$count,; \
s,ADDITIONAL,$ADDITIONAL,; \
s,RENDER,$RENDER,; \
s,BACKINGSTORE,$BACKINGSTORE,; \
s,COMPOSITE,$COMPOSITE,; \
s,SHAREDMEM,$SHAREDMEM,; \
s,EMULSHPIX,$EMULSHPIX,; \
s,AUDIO,$AUDIO,; \
s,SHARECNT,$SHARECNT,; \
s,DEFAULTPRINTER,$DEFAULTPRINTER,; \
s,PRINTER,$PRINTER,; \
s,PRINTING,$allowprint,; \
s,STORAGESHARE,$STORAGESHARE,; \
s,SHARES,$allowshares,; \
${FULLSCREEN:+ s,800x600,fullscreen,;}" -i "$session"
chmod -w "$session"
"$PROGRAM" --autologin --autoresume --session "$session" &>/dev/null &
true

done
