#!/usr/bin/bash
#last-update 24/04/2025
export TEXTDOMAIN="Tuningdrake"
applang="$(locale|grep LANG|cut -d '=' -f 2|cut -d '.' -f 1|cut -d '_' -f 1)"
case "$applang" in
	es|pt|fr);;
	*)	export LANGUAGE=en;;
esac
function Pausa
{
	echo -n "$(gettext "Presione enter  ...")"
	read resp;
}
function FoxUpdater
{
	if [ -d ${AppDir}/firefox ]; then
		if [ "$justlaunchers" = 0 ] || [  -d /tmp/firefox/firefox ]; then
			rm -rf ${ExcDir}/firefox-quantum ${AppDir}/firefox-*
		fi
	fi
	if [ ! -d ${AppDir}/firefox ] && [ ! -d /tmp/firefox/firefox ]; then
		echo "$(gettext "No tiene instalado firefox")"
		popd > /dev/null 2>&1
		rm -rf /tmp/firefox
		exit 2
	fi

	if [  -d firefox/ ]; then
		rm -rf ${AppDir}/firefox
		mkdir -p ${AppDir}/firefox
		mv firefox/* ${AppDir}/firefox/
	fi
	if [ $scope = 1 ]; then
		! test -d "${DesktopDir}" && mkdir -p "${DesktopDir}"
	fi
	mv -f firefox-*.desktop ${DesktopDir}/
	if [ $keepesr = 1 ] || [ $all_launchers = 1 ] ; then
		mv firefox-priv ${ExcDir}/
	fi
	if [ $keepesr = 2 ] || [ $all_launchers = 1 ] ; then
		ln -sf ${AppDir}/firefox/firefox ${ExcDir}/firefox-quantum
	fi
	
	if [ $scope = 2 ]; then 
		rm -f /etc/cron.weekly/firefox-update
		rm -f ${ExcDir}/firefox-quantum
		mv firefox-quantum ${ExcDir}/firefox-quantum
	fi
	update-menus
}

function FoxLaunchers
{
	local bashdir="$(which bash)"
	local common_lines="function checkversion
{
	wget --spider --content-disposition \"https://download.mozilla.org/?product=firefox-latest-ssl&os=linux${arch}&lang=${slocale}\" 2> /tmp/firefox.log
	foxver=\"\$(grep xz2\$ /tmp/firefox.log |cut -d '/' -f7)\"
	if [ -n \"\$foxver\" ]; then
		if [ -d ${AppDir}/firefox ]; then
			if [ -n \"\$(${AppDir}/firefox/firefox -V|grep \$foxver)\" ]; then
				rm -f /tmp/firefox.log
				return 1
			fi
		fi
	fi
	return 0
}
if [ ! -f ~/.config/.firefoxchek ]; then
	date +%Y%m%d --date=\"next mon\" > ~/.config/.firefoxchek 
	if checkversion ; then 
	  gtk-launch firefox-updater
	  while ps ax|grep \"latest-firefox\"|grep -v grep ;
	  do
		sleep 5s
	  done
	fi
else
	if [ \$(date +%Y%m%d) -ge \$(cat ~/.config/.firefoxchek) ]; then
		date +%Y%m%d --date=\"next mon\" > ~/.config/.firefoxchek 
	   if checkversion ; then 
	      gtk-launch firefox-updater
	      while ps ax|grep \"latest-firefox\"|grep -v grep ;
	      do
		    sleep 5s
	      done
	   fi
	fi
fi
"
	if [ $keepesr = 2 ] || [ $all_launchers = 1 ]; then
		echo "[Desktop Entry]
Version=1.0
Name=Firefox Desktop
Exec=${ExcDir}/firefox-quantum %u
Icon=${IconDir}/default32.png
Terminal=false
Type=Application
StartupWMClass=Firefox
MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;x-scheme-handler/http;x-scheme-handler/https;
Categories=GTK;Network;WebBrowser;X-Mageia-CrossDesktop;
Keywords=web;browser;internet;
Actions=new-window;new-private-window;profile-manager-window;

[Desktop Action new-window]
Name=Open a New Window
Name[es]=Abrir Nueva Ventana
Exec=${ExcDir}/firefox-quantum %u

[Desktop Action new-private-window]
Name=Open a New Private Window
Name[es]=Abrir Nueva Ventana Privada
Exec=${ExcDir}/firefox-quantum --private-window %u

[Desktop Action profile-manager-window]
Name=Open the Profile Manager
Name[es]=Abrir el Gestor de Perfiles
Exec=${ExcDir}/firefox-quantum --ProfileManager" > firefox-quantum.desktop
	chmod a+r firefox-quantum.desktop
		
	fi
	
	if [ $keepesr = 1 ] || [ $all_launchers = 1 ]; then 
		echo "[Desktop Entry]
Version=1.0
Name=Firefox Profile Isolated
Name[es]=Firefox Perlfil Aislado
Exec=${ExcDir}/firefox-priv %u
Icon=${IconDir}/default32.png
Terminal=false
Type=Application
StartupWMClass=Firefox
MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;x-scheme-handler/http;x-scheme-handler/https;
Categories=GTK;Network;WebBrowser;X-Mageia-CrossDesktop;
Keywords=web;browser;internet;
Actions=new-window;new-private-window;

[Desktop Action new-window]
Name=Open a New Window
Name[es]=Abrir Nueva Ventana
Exec=${ExcDir}/firefox-priv %u

[Desktop Action new-private-window]
Name=Open a New Private Window
Name[es]=Abrir Nueva Ventana Privada
Exec=${ExcDir}/firefox-priv --private-window %u" > firefox-priv.desktop
		chmod a+r firefox-priv.desktop
		
		echo "#!${bashdir}
$common_lines
if [ -d \$HOME/.mozilla/firefox/quantum ]; then
	mv \$HOME/.mozilla/firefox/quantum \$HOME/.config/quantum
fi
if [ ! -d \$HOME/.config/quantum ]; then 
	mkdir -p \$HOME/.config/quantum
fi
if [ ! -f \$HOME/.config/quantum/user.js ]; then
	echo \"user_pref(\\\"extensions.enabledScopes\\\", 1);
user_pref(\\\"dom.webcomponents.customelements.enabled\\\", true);
user_pref(\\\"dom.webcomponents.shadowdom.enabled\\\", true); \">\$HOME/.config/quantum/user.js
fi
${AppDir}/firefox/firefox --profile \"\$HOME/.config/quantum\" \"\$@\" ">firefox-priv
		chmod a+rx firefox-priv
	fi
	
	if [ $scope = 2 ]; then 
		echo "[Desktop Entry]
Version=1.0
Name=Update Firefox Desktop
Name[es]=Actualizar Firefox Desktop
Comment=Update Firefox Desktop
Comment[es]=Actualizar Firefox Desktop
Exec=$UpdateLine
Icon=${AppDir}/firefox/icons/updater.png
Terminal=true
Type=Application
Categories=GTK;Network;WebBrowser;X-Mageia-CrossDesktop;">firefox-updater.desktop
		chmod a+r firefox-updater.desktop
		
		echo "#!${bashdir}
$common_lines
${AppDir}/firefox/firefox \"\$@\" " > firefox-quantum
	chmod a+rx firefox-quantum
	fi

	echo "[Desktop Entry]
Version=1.0
Name=Remove Firefox Desktop
Name[es]=Quitar Firefox Desktop
Comment=Remove Firefox Desktop
Comment[es]=Quitar Firefox Desktop
Exec=$RemoveLine
Icon=firefox-remove.png
Terminal=true
Type=Application
Categories=GTK;Network;WebBrowser;X-Mageia-CrossDesktop;">firefox-remove.desktop
	chmod a+r firefox-remove.desktop
}

function FoxClean
{
	rm -rf ${AppDir}/firefox
	rm -f ${DesktopDir}/firefox-*.desktop
	rm -f ${ExcDir}/firefox-*
	[ $scope = 2 ] && rm -rf ${AppDir}/firefox-* /etc/cron.weekly/firefox-update /usr/lib${arch}/{quantum,firefox-*}
	update-menus
}

function checkversion
{
	wget --spider --content-disposition "https://download.mozilla.org/?product=firefox-latest-ssl&os=linux${arch}&lang=${slocale}" 2> firefox.log
	foxver="$(grep xz$ firefox.log |cut -d '/' -f7)"
	if [ -n "$foxver" ]; then
		if [ -d ${AppDir}/firefox ]; then
			if [ -n "$(${AppDir}/firefox/firefox -V|grep $foxver)" ]; then
				echo "firefox $foxver $(gettext "ya esta instalado")"
				[ $npause = 0 ] && Pausa
				clear
				popd  > /dev/null 2>&1
				rm -rf /tmp/firefox
				exit
			fi
		fi
	fi
}

function setDestVars
{
	if [ "$keepesr" =  "2" ]; then
		removeesr="--removeesr"
	else
		removeesr="--keepesr"
	fi
	if [ "$scope" = "1" ]; then
	   DesktopDir=${HOME}/.local/share/applications
	   ExcDir="$HOME/bin"
	   [ ! -d ${ExcDir} ] && mkdir -p ${ExcDir}
	   AppDir="$HOME"
	   IconDir="${AppDir}/firefox/browser/chrome/icons/default"
	   UpdateLine="$0 --user $removeesr $launchersLine"
	   RemoveLine="$0 --remove-user"
	else
	   ExcDir="/usr/bin"
	   DesktopDir="/usr/share/applications"
	   AppDir="/opt"
	   IconDir="${AppDir}/firefox/browser/chrome/icons/default"
	   UpdateLine="$0 --all --pkexec $removeesr $launchersLine "
	   RemoveLine="pkexec $0 --remove-all"
	fi
}

function rootActions
{
	if [ ${keepesr} = 2 ]; then
		fox_remove="$(rpm -qa|grep firefox)"
		[ -n "$fox_remove" ] && /usr/sbin/urpme ${fox_remove} 
	fi
	[ ! -f /usr/lib${arch}/libatomic.so.1 ] && /usr/sbin/urpmi  --auto libatomic.so.1 --strict-arch
	! rpm -q cronie-anacron > /dev/null 2>&1 && /usr/sbin/urpmi  --auto cronie-anacron
}

interactive=0
keepesr=1
scope=1
justlaunchers=0
remove=0
all_launchers=0
launchersLine=""
foxver=""
use_pkexec=0
root_cmd="su - -c"
justRoot=0
npause=0

if [ $# = 0 ]; then
	interactive=1
else
	while [ $# -gt 0 ]; do
		case "$1" in
			"--keepesr")keepesr=1;;
			"--removeesr")keepesr=2;;
			"--root") justRoot=1;;
			"--launchers")justlaunchers=1;;
			"--all-launchers") all_launchers=1;launchersLine="--all-launchers";;
			"--pkexec") use_pkexec=1;root_cmd="pkexec";;
			"--npause") npause=1;;
			"--all")scope=2;;
			"--user")scope=1;;
			"--remove-user")remove=1;scope=1;;
			"--remove-all")remove=1;scope=2;;
			"--help")
				echo "$(gettext "Forma de uso"): latest-firefox [[--keepesr] | [--removeesr]]
	[[--all [--launchers] [--all-launchers] | [--user] | [--launchers] [--all-lanchers] [[--remove-user] | [--remove-all]]
	$(gettext "Si se ejecuta sin opciones se le harán algunas preguntas")
	--keepesr $(gettext "conservara") ($(gettext "si esta instalado")) $(gettext "el firefox proporcionado por mageia")
	--removeesr $(gettext "quitara") ($(gettext "si esta instalado")) $(gettext "el firefox proporcionado por mageia")
	--all $(gettext "todos los usuarios podrán usar") $(gettext "la ultima versión de firefox")
	--user $(gettext "solo el usuario actual podrá usar") $(gettext "la ultima versión de firefox")
	--launchers $(gettext "actualiza los lanzadores creados por el script")
			$(gettext "sin la opción") --all $(gettext "equivale a") --user --launchers
	--all-launchers $(gettext "Dependiendo de las elecciones solo se instala uno de los siguientes lanzadores") :
		$(gettext "Lanzador comun, ideal si no conservara la version ESR") 
		$(gettext "Lanzador en perfil Aislado, ideal si conservara la versión ESR")
		
		$(gettext "Esta opción forza la instalación de ambos lanzadores")
		$(gettext "¡CUIDADO! No se recomienda usarla si conservara la versión ESR")
	--remove-user $(gettext "elimina la instalación de firefox") $(gettext "del usuario actual")
	--remove-all $(gettext "elimina la instalación de firefox") $(gettext "del sistema")
			$(gettext "Ninguna de estas opciones elimina la carpeta") .config/quantum 
			$(gettext "Estas opciones ignoran la presencia de otras")
"
				exit 1;;
			*) $0 --help;exit 1;;
		esac
		shift
	done
fi

if [ "$(uname -m)" == "x86_64" ]; then
	arch="64"
fi

if [ "$interactive" = 1 ]; then
	clear
	echo "   Mageia $(gettext "eligió proporcionar")"
	echo "   $(gettext "la versión ESR de firefox")"
	echo "   $(gettext "Pero algunos sitios siempre dicen que esta desactualizada")"
	echo "   $(gettext "O peor solo dan soporte a versiones más recientes")"
	echo "   $(gettext "Este script descarga e instala")"
	echo "   $(gettext "La versión estable más reciente firefox")"
	Pausa
	clear
	echo -n "$(gettext "Desea conservar") firefox ESR? 1=Y , 2=N "
	read keepesr
	while [ "$keepesr" != "1" -a "$keepesr" != "2" ]; do
		echo
		echo "$(gettext "Respuesta incorrecta")" >&2
		echo -n "$(gettext "Desea conservar") firefox ESR? 1=Y , 2=N "
		read keepesr;
	done;
	echo
	echo -n "$(gettext "Forma de instalar") firefox ? 1=$(gettext "Este usuario") , 2=$(gettext "Todos los usuarios") "
	read scope
	while [ "$scope" != "1" -a "$scope" != "2" ]; do
		echo
		echo "0=$(gettext "Respuesta incorrecta")" >&2
		"$(gettext "Forma de instalar") firefox ? 1=$(gettext "Este usuario") , 2=$(gettext "Todos los usuarios") "
		read scope;
	done;
fi

setDestVars

if [ $UID = 0 ] && [ $justRoot = 1 ]; then
	rootActions
	exit
fi

if [ "$remove" != 0 ]; then
    if [ $scope = 2 ] && [ $UID != 0 ]; then
		if [ $use_pkexec = 0 ]; then
			echo "$(gettext "Proporcione clave de root para:")"
			echo "$(gettext "Desinstalar") Firefox Desktop"
			$root_cmd "$0 --remove-all" 
		else
			$root_cmd $0 --remove-all 
		fi
		exit
	fi
	FoxClean
	exit
fi

#detect system locale
slocale="$(locale|grep LANG|cut -d '=' -f 2|cut -d '.' -f 1|sed 's/_/-/g')"

if [ ! -d /tmp/firefox ]; then
	mkdir -p /tmp/firefox
fi

pushd /tmp/firefox > /dev/null 2>&1

	if [ "$justlaunchers" = 0 ]; then
		if [ ! -d "${AppDir}/firefox" ]; then
			Install_Text="$(gettext "Se instalara Firefox Desktop")

$(gettext "Encontrara la aplicación en el menu pero debera añadirla manualmente al panel de su escritorio")"
		else
			Install_Text="$(gettext "Se actualizara Firefox Desktop")"
		fi
		checkversion
		echo "$Install_Text"
		echo
		echo "$(gettext "Los fallos de esta versión deberan reportarse a") https://bugzilla.mozilla.org/home"
		echo
		Pausa
		wget --content-disposition "https://download.mozilla.org/?product=firefox-latest-ssl&os=linux${arch}&lang=${slocale}"
		code=$?
		if [ $code != 0 ]; then
			echo "$(gettext "Fallo la descarga")"
			exit 1
		fi
		tar xvf firefox*.tar.xz
		rm -f firefox*.tar.xz
		clear
	fi
	
	if [ "$interactive" = 1 ]; then
		clear
		echo "    $(gettext "Creando lanzadores")"
		[ $keepesr = 1 ] && echo "    Firefox Desktop $(gettext "se ejecutara en su propio perfil")"
	fi
	
	#NO Volver a crear los lanzadores (cuando se ejecuta como usuario y el proceso invoca ejecución como root)
	! ls|grep \.desktop > /dev/null 2>&1 && FoxLaunchers
	
	if [ "$scope" = "1" ]; then
		if [ "$UID" != 0 ]; then
			FoxUpdater
			if [ $keepesr = 2 ] && rpm -qa|grep firefox > /dev/null 2>&1 || [ ! -f /usr/lib${arch}/libatomic.so.1 ] || \
			! rpm -q cronie-anacron > /dev/null 2>&1 ; then
			    su_stat=1
			    while [ $su_stat != 0 ]; do
					echo "$(gettext "Proporcione clave de root para:")"
					[ $keepesr = 2 ] && rpm -qa|grep firefox && echo "$(gettext "quitar firefox ESR")"
					[ ! -f /usr/lib${arch}/libatomic.so.1 ] || ! rpm -q cronie-anacron > /dev/null 2>&1 && \
					echo "$(gettext "instalar algunas dependencias")"
					su - -c "$0 --root $removeesr"
					su_stat=$?
					echo
				done
			fi
		fi
	else
		if [ "$UID" != 0 ]; then 
			su_stat=1
			while [ $su_stat != 0 ]; do
				if [ $use_pkexec = 0 ]; then
					echo "$(gettext "Proporcione clave de root para:")" 
					echo "$(gettext "instalar firefox globalmente")"
					[ $keepesr = 2 ] && rpm -qa|grep firefox && echo "$(gettext "quitar firefox ESR")"
					[ ! -f /usr/lib${arch}/libatomic.so.1 ] || ! rpm -q cronie-anacron > /dev/null 2>&1 && \
					echo "$(gettext "instalar algunas dependencias")"
					$root_cmd "$0 --all --launchers $removeesr $launchersLine"
					su_stat=$?
					echo
				else
					$root_cmd $0 --all --launchers $removeesr $launchersLine
					su_stat=$?
				fi
			done
			exit
		else
			FoxUpdater
			rootActions
			if [ -d "/usr/lib${arch}/firefox-sta" ]; then
				rm -rf /usr/lib${arch}/firefox-sta /usr/bin/firefox-sta ${DesktopDir}/{firefox-sta,firefoxupdater}.desktop
			fi
			if [ $keepesr = 2 ] || [ $all_launchers = 1 ]; then
				#ln -nsf ${AppDir}/firefox ${AppDir}/firefox-$(${AppDir}/firefox/firefox -V|cut -d " " -f 3)
				if  [ ! -f /usr/lib${arch}/firefox/browser/defaults/preferences/mga.js ]; then
					[ -f /usr/share/autofirma/autofirma.js ] && \
						ln -sf /usr/share/autofirma/autofirma.js ${AppDir}/firefox/defaults/pref/autofirma.js
					[ -f /usr/lib${arch}/firefox/defaults/pref/configuradorfnmt.js ] && \
						ln -sf /usr/lib${arch}/firefox/defaults/pref/configuradorfnmt.js \
						${AppDir}/firefox/defaults/pref/configuradorfnmt.js
				fi
			fi
	
		fi
	fi
popd  > /dev/null 2>&1
rm -rf /tmp/firefox
