#!/bin/sh
MAIN_SCRIPT_PID="$$"
################################################################
# Ubuntu Live Chat Support 0.3.14 "All you need is Love"       #
################################################################
# File: ubuntu-live-support                                    #
# Version: 0.3.14					       #
# Description: Handles main scripting events                   #
#                                                              #
# Author: Joel Bryan T. Juliano <joelbryan.juliano@gmail.com>  #
# License: GPL                                                 #
################################################################

COUNTRY="`sed -ne 's/.*_\([a-zA-Z][a-zA-Z]\).*/\1/p' <<< $LANG`"
DESC_SUFFIX="Ubuntu Channel"
COUNTRY_DESCRIPTION="`cat /usr/lib/ubuntu-live-support/locales | grep $COUNTRY`"
USER_LANGUAGE="`sed 's/_.*//' <<< $LANG`"
USER_LANG_DESC_SUFFIX="Speaking Ubuntu Channel"
USER_LANG_DESC="`cat /usr/lib/ubuntu-live-support/language | grep ^$USER_LANGUAGE`$USER_LANG_DESC_SUFFIX"
USER_LANG_CHANNEL="`echo $USER_LANG_DESC | sed 's/[^(]*(\([^)]*\)).*/\1/'`"
DESCRIPTION="`echo $COUNTRY_DESCRIPTION | sed 's/.*(\(.*\))/\1/'`"
user_nick_argv=$1
user_register_nick_argv=$2
user_wizard_screen_argv=$3

if [ -s $user_nick_argv ]
then
 if [ ! -s $HOME/.livechatsupport/name ]
 then
 user_nick_argv="$USERNAME"
 else
 user_nick_argv="`cat $HOME/.livechatsupport/name 2> /dev/null`"
 fi
fi

if [ -s $user_register_nick_argv ]
then
 if [ ! -s $HOME/.livechatsupport/name ]
 then
 user_register_nick_argv="$USERNAME"
 else
 user_register_nick_argv="`cat $HOME/.livechatsupport/name 2> /dev/null`"
 fi
fi

if [ -s $user_wizard_screen_argv ]
then
user_wizard_screen_argv="main"
fi

last_stat="`cat $HOME/.livechatsupport/status 2> /dev/null`"
if [ "$last_stat" = "1" ] 
then
rm -rf $HOME/.livechatsupport/password 2>/dev/null
fi

/usr/lib/ubuntu-live-support/livechatsupport $user_nick_argv $user_register_nick_argv $user_wizard_screen_argv | (
GUI_PID="$+"
read nick
read password
read register_username
read register_password
read register_email
read register_website
read register_phone
read register_gsm
read action_signal
read user_settings

_icon="/usr/share/icons/gnome/16x16/stock/generic/stock_people.png"
_register_window_title="Ubuntu Live Chat Support Registration"
_register_window_message="
Please wait while we send your registration details to Freenode.net. 

This may take 8-10 minutes, depending on the security imposed time
by NickServ to minimize abuse.

For more information, please visit http://www.freenode.net
"
_register_window_title_drop="Failed registration cleanup"
_register_window_message_drop="Cleaning up previous failed registration"

_check_window_title="Checking Availability"
_check_window_message="Checking if nick $register_username is available"
_check_window_title_failed="Previous registration failed"
_check_window_message_failed="A previous attempt to register this nick failed, please register it again"

function gaimconfigcheck {

if [ ! -e $HOME/.gaim/ubuntu-live-support/profiles/$nick/accounts.xml ]
then
export nick
export password
/usr/lib/ubuntu-live-support/prepare-gaim accounts &
PREP_GAIM_ACCOUNT="$!"
fi

if [ ! -e $HOME/.gaim/ubuntu-live-support/profiles/$nick/blist.xml ]
then
export nick
export password
export DESCRIPTION
export COUNTRY
export USER_LANG_DESC_SUFFIX
export USER_LANG_DESC
export USER_LANG_CHANNEL
export DESC_SUFFIX
/usr/lib/ubuntu-live-support/prepare-gaim buddylist &
PREP_GAIM_BUDDYLIST="$!"
fi

if [ ! -e $HOME/.gaim/ubuntu-live-support/profiles/$nick/prefs.xml ]
then
export nick
export user_settings
if [ "$user_settings" = "use alternative layout" ]
then
/usr/lib/ubuntu-live-support/prepare-gaim preferences &
PREP_GAIM_PREFERENCES="$!"
else
/usr/lib/ubuntu-live-support/prepare-gaim preferences2 &
PREP_GAIM_PREFERENCES="$!"
fi

fi

if [ -e $HOME/.gaim/ubuntu-live-support/profiles/$nick/prefs.xml ]
then
export nick
export user_settings
if [ "$user_settings" = "use alternative layout" ]
then
/usr/lib/ubuntu-live-support/prepare-gaim preferences &
PREP_GAIM_PREFERENCES="$!"
else
/usr/lib/ubuntu-live-support/prepare-gaim preferences2 &
PREP_GAIM_PREFERENCES="$!"
fi

fi
}

function drop_nick 
{
last_status="`cat $HOME/.livechatsupport/status 2> /dev/null`"
if [ "$last_status" = "0" ]
then
((
last_register_nick="`cat $HOME/.livechatsupport/name 2> /dev/null`" 
last_register_pass="`cat $HOME/.livechatsupport/password 2> /dev/null`" 
export last_register_nick
export last_register_pass
initial_feedback
/usr/lib/ubuntu-live-support/livechatsupport-register-cleanup ) | zenity --progress --title="$_register_window_title_drop" --width=500 --window-icon="$_icon" --text="$_register_window_message_drop" --auto-close
) 2>/dev/null | REGISTER_ZENITY_PID="$+"
fi
}

function register 
{
((
mkdir $HOME/.livechatsupport 2> /dev/null
echo "$register_username" > $HOME/.livechatsupport/name
echo "$register_password" > $HOME/.livechatsupport/password
echo "0" > $HOME/.livechatsupport/status

export register_username
export register_password
export register_email
export register_website
export register_phone
export register_gsm
export user_settings
initial_feedback
/usr/lib/ubuntu-live-support/livechatsupport-register) | zenity --progress --title="$_register_window_title" --width=500 --window-icon="$_icon" --text="$_register_window_message" --auto-close
echo 1 > $HOME/.livechatsupport/status
) 2>/dev/null | REGISTER_ZENITY_PID="$+"
kill_script_pid && kill_main_pid
}

function check 
{

last_status="`cat $HOME/.livechatsupport/status 2> /dev/null`"
last_nick="`cat $HOME/.livechatsupport/name 2> /dev/null`"
if [ "$last_status" = "0" ]
then
  if [ "$last_nick" = "$register_username" ]
  then
  zenity --error --title="$_check_window_title_failed" --window-icon=$_icon --text="$_check_window_message_failed"
  kill_script_pid | ubuntu-live-support $last_nick $last_nick register | kill_main_pid
  fi
  if [ ! "$last_nick" = "$register_username" ]
  then
((
  export register_username
  initial_feedback 
  /usr/lib/ubuntu-live-support/livechatsupport-check) | zenity --progress --title="$_check_window_title" --width=500 --window-icon=$_icon --text="$_check_window_message" --auto-close
) 2>/dev/null | CHECK_ZENITY_PID="$+"
  fi
else
((
  export register_username
  initial_feedback 
  /usr/lib/ubuntu-live-support/livechatsupport-check) | zenity --progress --title="$_check_window_title" --width=500 --window-icon=$_icon --text="$_check_window_message" --auto-close
) 2>/dev/null | CHECK_ZENITY_PID="$+"
fi

kill_script_pid && kill_main_pid
}

function initial_feedback {
timer_security=10
progress_feedback=50

for i in `seq 10 $timer_security $progress_feedback`;
do
echo $i
sleep $timer_security
done
}

function run_gaim {
gaim --config $HOME/.gaim/ubuntu-live-support/profiles/$nick/
}

function kill_main {
sleep 5 && kill $MAIN_SCRIPT_PID 2> /dev/null
}

function kill_prep {
kill $PREP_GAIM_ACCOUNT 2> /dev/null
kill $PREP_GAIM_PREFERENCES 2> /dev/null
kill $PREP_GAIM_BUDDYLIST 2> /dev/null
}

function kill_script_pid {
kill $REGISTER_ZENITY_PID 2> /dev/null
kill $CHECK_ZENITY_PID 2> /dev/null
kill $GUI_PID 2> /dev/null
}

if [ ! "$action_signal" = "exit" ]
then

if [ "$action_signal" = "unregistered login" ]
then
nick=`echo "guest_$nick"`
export nick
gaimconfigcheck
kill_main | kill_script_pid
run_gaim
fi

if [ "$action_signal" = "send registration" ]
then
kill_script_pid
drop_nick
register 
kill_script_pid
fi

if [ "$action_signal" = "check availability" ]
then
kill_script_pid
check && kill_script_pid
fi

if [ "$action_signal" = "registered login" ]
then
gaimconfigcheck
kill_main | kill_script_pid
run_gaim
fi

exit 0;

else
kill_prep | kill_script_pid | kill_main
exit 0;

fi
)
