#!/usr/bin/env wish
###
###
################################################################
###                                              ###############
###        Alvaro's Messenger - amsn             ###############
###                                              ###############
###       http://amsn.sourceforge.net            ###############
###     amsn-users@lists.sourceforge.net         ###############
###                                              ###############
################################################################
### airadier at users.sourceforge.net (airadier) ###############
### Universidad de Zaragoza                      ###############
### http://aim.homelinux.com                     ###############
################################################################
### grimaldo@panama.iaehv.nl (LordOfScripts)     ###############
### http://www.coralys.com/linux/                ###############
################################################################
### Original ccmsn                               ###############
### http://msn.CompuCreations.com/               ###############
### Dave Mifsud <dave at CompuCreations dot com> ###############
################################################################
###
###
### This program is free software; you can redistribute it and/or modify
### it under the terms of the GNU General Public License as published by
### the Free Software Foundation; version 2 of the License
###
### This program is distributed in the hope that it will be useful,
### but WITHOUT ANY WARRANTY; without even the implied warranty of
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
### GNU General Public License for more details.
###
### You should have received a copy of the GNU General Public License
### along with this program; if not, write to the Free Software
### Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
###
###


############################################################
### Some global variables
############################################################
set version "0.90"
set date "02/17/2004"
set weburl "http://amsn.sourceforge.net"
set program_dir ""
set HOME ""
set files_dir ""

#=======================================================================


############################################################
### Look if we are launched from a link
### and set the correct working dir
############################################################

#Fixed by Tomasz Nguyen
set program_dir [file dirname [info script]]
set program [file tail [info script]]

while {[catch {file readlink [file join $program_dir $program]} program]== 0} {
	if {[file pathtype $program] == "absolute"} {
		set program_dir [file dirname $program]
	} else {
		set program_dir [file join $program_dir [file dirname $program]]
	}

	set program [file tail $program]
}

unset program


############################################################
### Setup other important directory paths
### depending on the platform
############################################################

if {![catch {tk windowingsystem} wsystem] && $wsystem == "aqua"} {
	set HOME "[file join $env(HOME) Library/Application\ Support/amsn]"
	set files_dir "[file join $env(HOME) Desktop/amsn\ received\ files]"
} elseif {$tcl_platform(platform) == "unix"} {
   set HOME "[file join $env(HOME) .amsn]"
   set files_dir "[file join $env(HOME) amsn_received]"
} elseif {$tcl_platform(platform) == "windows"} {
  if {[info exists env(USERPROFILE)]} {
     set HOME "[file join $env(USERPROFILE) amsn]"
     set files_dir "[file join $env(USERPROFILE) amsn_received]"
  } else {
   set HOME "[file join [pwd] amsn_config]"
   set files_dir "[file join [pwd] amsn_received]"
  }
} else {
   set HOME "[file join [pwd] amsn_config]"
   set files_dir "[file join [pwd] amsn_received]"
}

############################################################
### And setup where to find optional packages
############################################################

lappend auto_path "[file join $program_dir plugins]"
lappend auto_path "[file join ${HOME} plugins]"


set libtls ""

catch { source [file join $HOME tlsconfig.tcl] }

if { $libtls != "" && [lsearch $auto_path $libtls] == -1 } {
    lappend auto_path $libtls
}

#TODO: Move this from here ??
#///////////////////////////////////////////////////////////////////////
#Notebook Pages (Buddies,News,Calendar,etc.)
set pgBuddy ""
set pgNews  ""
#///////////////////////////////////////////////////////////////////////


############################################################
#### Load program modules
############################################################
set initialize_amsn 1



proc reload_files { } {
    foreach glob "[info globals] xmms" {
	global $glob
    }

    source [file join $program_dir ctthemes.tcl]
    source [file join $program_dir notebook.tcl]	;# Notebook Megawidget
    #source [file join $program_dir notebook1.tcl]	;# Notebook Megawidget
    source [file join $program_dir rnotebook.tcl]	;# Notebook Megawidget
    source [file join $program_dir progressbar.tcl]	;# Progressbar Megawidget
    source [file join $program_dir dkffont.tcl]	;# Font selection megawidget
    source [file join $program_dir migmd5.tcl]
    source [file join $program_dir des.tcl]		;# DES encryption
    source [file join $program_dir sxml.tcl]   	;# Simple XML parser

    source [file join $program_dir lang.tcl]
    source [file join $program_dir automsg.tcl]
    source [file join $program_dir smileys.tcl]
    source [file join $program_dir skins.tcl]       ;# Used for skinning purposes
	source [file join $program_dir gui.tcl] ;#gui.tcl must be at the beggining to make msg_box procedure available for errorss
	source [file join $program_dir config.tcl]
    source [file join $program_dir proxy.tcl]
    source [file join $program_dir protocol.tcl]
    source [file join $program_dir ctadverts.tcl]
    source [file join $program_dir ctdegt.tcl]
    source [file join $program_dir hotmail.tcl]
    source [file join $program_dir groups.tcl]	;# Handle buddy groups
    source [file join $program_dir abook.tcl]	;# Handle buddy address book
    source [file join $program_dir anigif.tcl]	;# Animated GIFS
    if {$tcl_platform(platform) == "unix"} {
     source [file join $program_dir xmms.tcl]
    }
	source [file join $program_dir alarm.tcl]	;# Alarms code (Burger)
    source [file join $program_dir dock.tcl]	;# Docking routines
    source [file join $program_dir trayicon.tcl]	;# Docking routines for freedesktop system tray compliant docks
    source [file join $program_dir loging.tcl]	;# Euh yeh it's for loging :P
    source [file join $program_dir combobox.tcl]	;# The all mighty combobox is here! (B. Oakley)
    source [file join $program_dir blocking.tcl]    ;# The blocking users feature
    source [file join $program_dir remote.tcl  ]    ;# The remote control procedures
    source [file join $program_dir plugins.tcl]	;# Plugins system
    source [file join $program_dir balloon.tcl]       ;# For the balloons tooltip
    source [file join $program_dir png.tcl]       ;# PNG Parser and zlib deflate in pure TCL (KaKaRoTo)

    load_lang
}

proc check_imagemagick {} {
	global config

	if {$config(convertpath) == ""} {
		set config(convertpath) "convert"
	}
	
	# Check if ImageMagick is Installed, if so dont do nothing, otherwise disable display pics
	status_log "Checking ImageMagick...\n"
	if { [catch { exec $config(convertpath) } res] } {
		if {$config(getdisppic) == 1 } {
			msg_box "[trans installconvert]"
			status_log "ImageMagick not installed in \"$config(convertpath)\" got error $res\n Disabling display pictures\n"
		}
		#-1 means you want them enabled, but imagemagic is not installed...
		set config(getdisppic) -1
		return 0
	} else {
		set config(getdisppic) 1
		return 1
	}
}



reload_files

set initialize_amsn 0
#///////////////////////////////////////////////////////////////////////

if { [catch {package require tls}] } {
    # Either tls is not installed, or $auto_path does not point to it.
    # Should now never happen; the check for the presence of tls is made
    # before this point.
#    status_log "Could not find the package tls on this system.\n"
    set tlsinstalled 0
} else {
    set tlsinstalled 1
}


#create_dir $HOME
set log_dir "[file join ${HOME} logs]"
#create_dir $log_dir

sb set ns name ns
sb set ns sock ""
sb set ns data [list]
sb set ns serv [split $config(start_ns_server) ":"]
sb set ns stat "d"

set family [lindex $config(basefont) 0]
set size [lindex $config(basefont) 1]

::themes::Init
degt_Init
if { $family == "" } { set family "Helvetica"}
if { $size == "" } { set size "11"}
::amsn::initLook $family $size $config(backgroundcolor)


if { $config(encoding) != "auto" } {
  set_encoding $config(encoding)
}

if { $config(receiveddir) != "" } {
   set res [create_dir $config(receiveddir)]
   if { $res >= 0} {
      set files_dir $config(receiveddir)
   } else {
      create_dir $files_dir
   }
} else {
	set config(receiveddir) $files_dir
	create_dir $files_dir
}

cmsn_draw_main

bind all <KeyPress> "set idletime 0"

idleCheck

degt_protocol_win
degt_ns_command_win

after 500 proc_ns
after 750 proc_sb

#If you are on any operating system (except Darwin), test if imagemagick is there. For darwin, the verification is in "proc OpenChatWindow {}"
if {$tcl_platform(os) != "Darwin"} { 
if { $config(getdisppic) != 0 } {
	check_imagemagick
}
}




if {$version != $config(last_client_version)} {
   ::amsn::aboutWindow

}

if { $config(autoconnect) == 1 } {
  ::MSN::connect $config(login) password
}

if { $config(autocheckver) == 1 } {
    set new [check_version_silent]
}

# BeginVerifyBlocked
if { $config(enableremote) } {
	init_remote_DS
}
init_dock

if {$config(startontray)} {
	if {$config(dock)!=0} {
		wm state . withdraw
	} else {
		wm state . iconic
	}
} else {
	wm state . normal
}
