#!/bin/bash
#
#####################################################################
#
# Firefox 3 - Penguin Install  - Version 3.8.1 - Codenome guti-guti (ISO-9959-1)
# Instalador do firefox automático para sistemas do pingüim
#
# LICENSE: http://creativecommons.org/licenses/by-sa/2.5/br/
# Use, Distribua e modifique. mas mantenha a citação ao meu nome e utilize da mesma licença!!!
# 
# Programmer Mario Rinaldi <lalorinaldi@gmail.com>
# http://rinaldi-rinaldi.info
#
######
#
# aplicativos necessários: 
# 	tar, 
#	bzip2,
#	dialog ou xdialog (não necessário)
#	wget
#
######
#
# Uso:
#	com permissão +x setada rodar como root via terminal, ou com dois cliques. tanto faz!
#	opções de parametros:
#	--help ou --ajuda) exibe a tela de ajuda;
#	--dialog) executa o programa com uso de dialog (padrão)
#	--no-dialog ou --sem-dialog) executa o programa sem uso de dialog.
#	
######
#
# ChangeLog:
#	- 0.1 - codenome ué
#		Criado esboço do script, usando metodo imperativo sem intervenção do usuário;
#		Nessa Epoca não existiam comentários.
#	- 0.5 - codenome chocalho
#		Criada função download;
#		Alguns comentários foram criados.
#	- 1.0 - codenome fralda
#		Utilizando de dialog, para explicar ao usuário sobre os passos feitos;
#		Os passos eram feitos meio que escondidos;
#		Ainda eram escassos os comentários.
#	- 1.1 - codenome mamadeira
#		Melhoria no uso do dialog, criando todos os passos bonitinhos;
#	- 1.1.1
#		Padronização nas telas do dialog, com titulo, etc...
#	- 1.2
#		Criado o if que verifica o uso de dialog ou de xdialog
#	- 2.0	- codenome gugu-dada
#		criada a função de teste e as telas correspondentes (função chamada testando)
#		Arrumei os passos para a instalação (antes instalava em /usr/lib/ agora em /opt/firefox
#		criação de outras variáveis para uso em algum lugar, malucas e nada intuitivas, como: PQP,PROGRAM e OUTPUT
#		Criação de um cabeçalho do bem vagabundo, nem nome o script tinha...
#	- 3.0 - codenome guti-guti
#		padronização nas variaveis, viraram:
#			PQP, que virou V_COUNT,
#			PROGRAM que virou V_TEST_PROGRAM_EXIST,
#			OUTPUT que se transformou em V_OUTPUT_TMP.
#		Melhoria no cabeçalho, agora com comentários decentes, e um changelog (puts, trabalhoso isso viu! ¬¬)
#		Melhoria nos comentários
#		mudança de nome da função test para test_program, pois existe um programa chamado test ¬¬ 
#		Concebida a idéia de um parametro "--no-dialog", coisa q será implementada na versão 3.5
#	- 3.5
#		Mudança de nome da função download para download_with_dialog;
#		criado o case de parametros;
#		criada a função download_no_dialog (parametro --no-dialog);
#		Criada a função ajuda;
#		função testando desativada e código incluido nas funções download_with_dialog e download_no_dialog.
#	- 3.6	
#		Uma pequena mudança no if sobre o DISPLAY, para qnd nao existir dialog, usar a opção --no-dialog automaticamente
#		função testando recriada, agora não usando dialog, e exibindo em modo "texto' a existencia dos programas usados...
#	- 3.7
#		Criada a variável V_DIR_INSTALL
#		Criada a função diretorio_de_instalacao onde é recursiva, que pergunta se deseja mudar o diretório de instalação, 
#			ou manter o padrão (/opt/firefox), e verifica se a pessoa deseja mesmo aquela escolha....
#			passando o valor para a variável V_DIR_INSTALL, utilizada pelo resto do script
#	- 3.8
#		Padronização do nome das Funções
#		e Arrumado um probleminha no maldito IF do display (tinha bug, eu sei que tinha!!! mesmo não conseguindo produzi-lo!)
#	- 3.8.1
#		Não é uma merda, quando esquecemos de fechar um "case"??? merda!!! ¬¬
#
######
#
# ALGUNS NUMEROS:
# Este Script comtém 331 linhas totais, 199 linhas de código, 23 linhas em branco e 109 linhas de comentários (incluíndo este gigante cabeçalho).
# 
#####################################################################

# Variáveis usadas no programa... 
#  - arquivos temporários de output
#  - ou talvez alguma variável de count 
V_OUTPUT_TMP="/tmp/file_firefox_penguin_install_output"
V_TEST_PROGRAM_EXIST="/tmp/file_firefox_penguin_install_program_exist"
echo "" > $V_TEST_PROGRAM_EXIST
V_COUNT="0"
V_TITLE_APPLICATION="Firefox 3 - Penguin Install"
V_ARCHIVE_NAME="firefox-3.0.1.tar.bz2"

# função ajuda Oo duh
function F_ajuda {
	echo -e "
	USO firefox_penguin_install.sh [PARAMETRO]
	Parametros:
		-no-dialog \t instalação sem dialog
		-sem-dialog \t instalação sem dialog
		-dialog \t instalação com o dialog (padrão)
		--help \t imprime esta mensagem
		--ajuda \t imprime esta mensagem
	"
	exit
}


# teste de softwares instalados
function test_program {
	TMP=$(whereis $1 | awk '{print $2 }')
	if [ $TMP <> " " ]; then
		if [ -x $TMP ]; then
			echo "yeah!";
		fi
	else 
		echo "no :(";
		echo "* $1" >> $V_TEST_PROGRAM_EXIST
		V_COUNT=$(($V_COUNT + 1))
	fi
}



function F_testando {
	clear
	echo $V_TITLE_APPLICATION
	echo "=================================================="
	echo "Testando os aplicativos instalados:"
	echo -n "tar...... " 
	test_program tar
	echo -n "bzip2.... "
	test_program bzip2
	echo -n "wget..... "
	test_program wget
	sleep 1
	# se nao existe um programa dá esse aviso e sai!
	if [ $V_COUNT -gt 0 ]; then
		echo "é necessario instalar os seguintes programas para continuar (crash):" 
		cat $V_TEST_PROGRAM_EXIST
		exit
	fi
	clear
	cd /tmp
}


#esta funcao verifica se o usuário quer mudar o diretório de instalação, sendo o padrão /opt/firefox caso pressione enter
# e pergunta se ele deseja continuar com tal escolha, caso a resposta seja negativa, retorna a pergunta!
function F_diretorio_de_instalacao {
	case $1 in
		dialog) 
			V_DIR_INSTALL=$($DIALOG --backtitle "$V_TITLE_APPLICATION" --title "Idioma" --stdout --inputbox "Digite o DIRETORIO de Instalação! \n[DEFAULT: /opt/firefox/]" 10 70 )
			if [ $V_DIR_INSTALL -eq ""]; then 
				V_DIR_INSTALL="/opt/firefox"
			fi
			$($DIALOG --backtitle "$V_TITLE_APPLICATION" --title "Idioma" --stdout --yesno "Deseja realmente utilizar o diretório $V_DIR_INSTALL?" 10 70 )
			if [ $? = 1 ]; then
				F_diretorio_de_instalacao dialog
			fi;;
		nodialog)
			echo -e "Digite o Diretório de instalação (Default: /opt/firefox): "; read V_DIR_INSTALL
			if [ $V_DIR_INSTALL -eq ""]; then 
				V_DIR_INSTALL="/opt/firefox"
			fi
			echo "Deseja realmente utilizar o diretório $V_DIR_INSTALL?"
			PS3="Opção: "

			OPCOES="sim não"

			select opc in $OPCOES; do
				if [ "$opc" = sim ]; then
					break
				elif [ "$opc" = não ]; then
					F_diretorio_de_instalacao nodialog
					break
				else
					echo "Opção inválida! "
				fi
			done
		;;
	esac
}

#funcao principal - com uso de dialog
function F_download_with_dialog (){
	# caso esteja na interface gráfica utiliza do xdialog(se existe), senao usa o dialog
	if [ $DISPLAY ]; then
		if [ -x /usr/bin/xdialog ]; then
			DIALOG="xdialog";
		elif [ -x /usr/bin/dialog ]; then
			DIALOG="dialog";	
		else
			echo "$V_TITLE_APPLICATION"
			echo "=================================================="
			echo -e "\t voce não possui o dialog"
			echo -e "\t é chato,  :( "
			echo -e "\t mas vamos usar a opção --no-dialog automaticamente"
			echo -e "\t pressione [ENTER] para continuar!!!"
			read
			F_download_no_dialog;		
		fi	
	else
		if [ -x /usr/bin/dialog ]; then
			DIALOG="dialog";
		fi
	fi
	#testando os aplicativos...
	F_testando
	
	#seleciona o idioma a ser baixado o tarball
	LANGUAGE=$($DIALOG --backtitle "$V_TITLE_APPLICATION" --title "Idioma" --stdout --menu "escolha a linguagem desejada" 0 0 0 pt-BR pt-BR en-US en-US)

	cd /tmp
	wget ftp://ftp.mozilla.org/pub/firefox/releases/latest-3.0/linux-i686/$LANGUAGE/$V_ARCHIVE_NAME -b -o $V_OUTPUT_TMP
	$DIALOG --backtitle "$V_TITLE_APPLICATION" --title  "Fazendo download do arquivo $V_ARCHIVE_NAME" \
 		--tailbox $V_OUTPUT_TMP 20 70
	tar jxvf $V_ARCHIVE_NAME > $V_OUTPUT_TMP 2> /dev/null
	$DIALOG --backtitle "$V_TITLE_APPLICATION"  --title "descompactando o arquivo $V_ARCHIVE_NAME" \
 		--tailbox $V_OUTPUT_TMP 20 70
	
	#setar o diretório de instalação
	F_diretorio_de_instalacao dialog
	
	mv firefox $V_DIR_INSTALL
	mv $V_DIR_INSTALL/plugins $V_DIR_INSTALL/plugins.backup
	ln -s /usr/lib/firefox/plugins $V_DIR_INSTALL/plugins
	chmod 777 $V_DIR_INSTALL -R
	$DIALOG --backtitle "$V_TITLE_APPLICATION" --title "Link Simbolico" --yesno "Você deseja recriar o link 'firefox'?" 20 70
	if [ $? = 0 ]; then
		mv /usr/bin/firefox /usr/bin/firefox-old
		ln -s $V_DIR_INSTALL/firefox /usr/bin/ 
		$DIALOG --backtitle "$V_TITLE_APPLICATION" --title "yeah!" --msgbox "Voce agora pode chamar o seu firefox pelo comando 'firefox', e o antigo link pelo comando 'firefox-old'" 20 70
	else 
		ln -s $V_DIR_INSTALL/firefox /usr/bin/firefox-new
		$DIALOG --backtitle "$V_TITLE_APPLICATION" --title "yeah!" --msgbox "Voce agora pode chamar o seu firefox pelo comando 'firefox-new'" 20 70
	fi
	exit
}

#funcao principal - sem uso de dialog
function F_download_no_dialog {
	
	#testando os aplicativos...
	F_testando
	
	#seleciona o idioma a ser baixado o tarball
	echo $V_TITLE_APPLICATION
	echo "=================================================="
	echo "escolha a linguagem desejada!"
	PS3="Opção: "

	OPCOES="pt-BR en-US"

	select opc in $OPCOES; do
		if [ "$opc" = pt-BR ]; then
			LANGUAGE="pt-BR"
			break
		elif [ "$opc" = en-US ]; then
			LANGUAGE="en-US"
			break
		else
			echo "Opção inválida! "
		fi
	done
	
	#faz download e descompacta na pasta /tmp e move para o /opt
	echo  -e "Fazendo download do arquivo $V_ARCHIVE_NAME"
	wget ftp://ftp.mozilla.org/pub/firefox/releases/latest-3.0/linux-i686/$LANGUAGE/$V_ARCHIVE_NAME
	echo "descompactando o arquivo $V_ARCHIVE_NAME...." 
	sleep 1
	tar jxvf $V_ARCHIVE_NAME 2> /dev/null 

	#setar o diretório de instalação 
	F_diretorio_de_instalacao nodialog

	echo "Instalando o firefox no diretório $V_DIR_INSTALL" 
	mv firefox $V_DIR_INSTALL
	mv $V_DIR_INSTALL/plugins $V_DIR_INSTALL/plugins.backup
	ln -s /usr/lib/firefox/plugins $V_DIR_INSTALL/plugins
	chmod 777 $V_DIR_INSTALL -R

	# um menu com select para escolher se recria o link firefox ou não
	clear 
	echo $V_TITLE_APPLICATION
	echo "=================================================="
	echo "Você deseja recriar o link 'firefox'?"
	PS3="Opção: "

	OPCOES="recriar manter"

	select opc in $OPCOES; do
		if [ "$opc" = recriar ]; then
			mv /usr/bin/firefox /usr/bin/firefox-old
			ln -s $V_DIR_INSTALL/firefox /usr/bin/ 
			echo "Voce agora pode chamar o seu firefox pelo comando 'firefox', e o antigo link pelo comando 'firefox-old'"
			break
		elif [ "$opc" = manter ]; then
			ln -s $V_DIR_INSTALL/firefox /usr/bin/firefox-new
			echo "Voce agora pode chamar o seu firefox pelo comando 'firefox-new'"	
			break
		else
			echo "Opção inválida! "
		fi
	done
	exit
}

function F_curiosidade {
	echo -e "Este Script comtém 331 linhas totais!
		199 linhas de código, 23 linhas em branco e 109 linhas de comentários (incluíndo um gigante cabeçalho).
	"
	exit
}
	

# Testando parametros
case $1 in
	--help|--ajuda) F_ajuda;;
	--dialog) F_download_with_dialog;;
	--no-dialog|--sem-dialog) F_download_no_dialog;;
	--curiosidade|--easteregg) F_curiosidade;;
	*) F_download_with_dialog;;
esac
