#!/bin/bash

#########################################
#	a3Downloader3.sh					#
#	aabilio@gmail.com					#
#	http://en.wikipedia.org/wiki/WTFPL 	#
#########################################
	
# No "valida" ningún dato, si hay error no devuelve info sobre el mismo.
# Válido mientras mantengan la mismas estructura de vídeos y URLs en el servidor.

#No modificar, servidores de a3 para web y videos:
servidorDescarga="http://desprogresiva.antena3.com/"
servidorAntena3="http://www.antena3.com"
HTML=`echo $1`

clear

function fun_descargaHtml()
{
	#Descarga la url pasada por parametro, la del cap.:
	echo '[+] Descargando '$HTML'...'
	sleep 1.5
	wget -nv $HTML
	ERR=$?
	echo ''
	if [ $ERR -ne 0 ]
	then
		fun_error
		opciones="Si No"
		select opc in $opciones; do
			if [ "$opc" = "Si" ]; then
				fun_a_cascoporro
				break
			elif [ "$opc" = "No" ]; then
				exit
				break
			fi
		done
	fi
}

function fun_descargaXML() 
{
	#Descargar xml:
	echo '[+] Descargando ' $nombreXML'...'
	sleep 1.5
	wget -nv $servidorAntena3$XML
	ERR=$?
	echo ''
	if [ $ERR -ne 0 ]
	then
		fun_error
		opciones="Si No"
		select opc in $opciones; do
			if [ "$opc" = "Si" ]; then
				fun_a_cascoporro
				break
			elif [ "$opc" = "No" ]; then
				exit
				break
			fi
		done
	fi
}

function fun_borrar()
{
	sleep 1.5
	find . -maxdepth 1 -name "*.html*" -exec rm {} \;
	find . -maxdepth 1 -name "*.xml*" -exec rm {} \;
	#find . -name "*.mp4*" -exec rm {} \;
	echo ''
}

function fun_datosDescarga()
{
	fun_descargaHtml

	nombreHTML=`echo $HTML | tr "/" "\n" | grep -F .html`
	XML=`cat $nombreHTML | grep ".addVariable(\"xml\"" | cut -d\" -f4`
	nombreXML=`echo $XML | tr "/" "\n" | grep -F .xml`

	fun_descargaXML
}

function fun_descargarVideos()
{
	wget $servidorDescarga$i -O $nombreMp4
	ERR=$?
	echo ''
	if [ $ERR -ne 0 ]
	then
		fun_error
		opciones="Si No"
		select opc in $opciones; do
			if [ "$opc" = "Si" ]; then
				fun_a_cascoporro
				break
			elif [ "$opc" = "No" ]; then
				exit
				break
			fi
		done
	fi
}

function fun_final()
{
	#Borra antiguos .html, .xml que molesten:
	echo '[+] Borrando archivos temporales'
	fun_borrar

	echo -e '[FIN] \033[38;5;148mDescargas Finalizadas\033[39m'
	exit
}

function fun_error()
{
	echo -e '\033[38;5;148m[!!!]\033[39m Se ha producido algún tipo de error al descargar '$servidorDescarga$i
	echo 'Puede ser por problemas de red, por que no se haya encontrado el archivo'
	echo 'o por que introducido mal la URL (recuerda que tiene que tener http://www).'
	echo 'Quieres volver a probar con un método que no recoge datos automaticamente del vídeo'
	echo 'pero seguramente descarge las partes [s/n] ? '
}


########## FORZAR DESCARGA ##########
function fun_a_cascoporro
{
	#fun_datosDescarga

	echo '[+] Descargando '$HTML'...'
	sleep 1.5
	wget -nv $HTML
	ERR=$?
	echo ''
	if [ $ERR -ne 0 ]
	then
		echo 'ERROR: al descargar, ¿Has introducido la URL con http://www??'
		exit
	fi
	
	#Hacer sus propias llamadas
	nombreHTML=`echo $HTML | tr "/" "\n" | grep -F .html`
	XML=`cat $nombreHTML | grep ".addVariable(\"xml\"" | cut -d\" -f4`
	nombreXML=`echo $XML | tr "/" "\n" | grep -F .xml`

	#Descargar xml:
	echo '[+] Descargando ' $nombreXML'...'
	sleep 1.5
	wget -nv $servidorAntena3$XML
	ERR=$?
	echo ''
	if [ $ERR -ne 0 ]
	then
		echo 'ERROR al descargar'
		exit
	fi

	programa=`echo $nombreHTML | cut -d. -f1`

	echo -e "\033[38;5;148m[+] Se descargará: "$programa"\033[39m"
	echo ''
	sleep 2

	#Sacar caps de .xml y descargar los caps.:
	for i in `cat $nombreXML | grep .mp4 | cut -d[ -f3 | cut -d] -f1`
	do
		PARTE=`echo $i | cut -d. -f1 | cut -d/ -f6`
		if [ -z $PARTE ]
		then
			PARTE="001"
		fi
		nombreMp4=$programa'_parte'$PARTE'.mp4'
		echo -e "[+] \033[38;5;148mDescargando: "$nombreMp4"\033[39m ($i)"
		wget $servidorDescarga$i -O $nombreMp4
		ERR=$?
		echo ''
		if [ $ERR -ne 0 ]
		then
			echo 'ERROR al descargar. Inténtalo a mano'
			exit
		fi
	done
	fun_final
}

################################
########## MODO SALÓN ##########
################################

function fun_series()
{
	fun_datosDescarga

	#Establecer datos de la serie:
	serie=`echo $HTML | cut -d/ -f5`
	capitulo=`echo $nombreHTML | cut -d\- -f2 | cut -d. -f1`
	temporada=`echo $HTML | cut -d\/ -f6 | cut -d\- -f2`

	#Mostrar datos de la serie
	echo ''
	echo -e '\033[38;5;148m============================================\033[39m'
	echo -e '\033[38;5;148mSerie : \033[39m"'$serie'"'
	echo -e '\033[38;5;148mCap   : \033[39m"'$capitulo'"'
	echo -e '\033[38;5;148mTemp  : \033[39m"'$temporada'"'
	echo ''
	echo -e '\033[38;5;148mSe descargarán las partes: \033[39m'
	for i in `cat $nombreXML | grep .mp4 | cut -d[ -f3 | cut -d] -f1`
	do
		nombreMp4=$serie'-'$temporada'x'$capitulo'_parte'`echo $i | cut -d. -f1 | cut -d/ -f6`'.mp4'
		echo $nombreMp4" ($i)"
	done
	echo -e '\033[38;5;148m============================================\033[39m'
	echo ''
	echo ''
	sleep 4
	
	#Sacar caps de .xml y descargar los caps.:
	for i in `cat $nombreXML | grep .mp4 | cut -d[ -f3 | cut -d] -f1`
	do
		nombreMp4=$serie'-'$temporada'x'$capitulo'_parte'`echo $i | cut -d. -f1 | cut -d/ -f6`'.mp4'
		echo -e "[+] \033[38;5;148mDescargando: "$nombreMp4"\033[39m ($i)"
		#wget $servidorDescarga$i -O $nombreMp4
		#echo ''
		fun_descargarVideos
	done
	fun_final
}

function fun_programa() 
{
	fun_datosDescarga

	#Establecer datos de la serie:
	programa=`echo $HTML | cut -d/ -f5`
	fecha=`echo $nombreHTML | cut -d. -f1`

	#Mostrar datos del programa
	echo ''
	echo -e '\033[38;5;148m============================================\033[39m'
	echo -e '\033[38;5;148mPrograma : \033[39m"'$programa'"'
	echo -e '\033[38;5;148mFecha    : \033[39m"'$fecha'"'
	echo ''
	echo -e '\033[38;5;148mSe descargarán las partes: \033[39m'
	for i in `cat $nombreXML | grep .mp4 | cut -d[ -f3 | cut -d] -f1`
	do
		nombreMp4=$programa'-'$fecha'_parte'`echo $i | cut -d. -f1 | cut -d/ -f6`'.mp4'
		echo $nombreMp4" ($i)"
	done
	echo -e '\033[38;5;148m============================================\033[39m'
	echo ''
	echo ''
	sleep 4
	
	#Sacar caps de .xml y descargar los caps.:
	for i in `cat $nombreXML | grep .mp4 | cut -d[ -f3 | cut -d] -f1`
	do
		nombreMp4=$programa'-'$fecha'_parte'`echo $i | cut -d. -f1 | cut -d/ -f6`'.mp4'
		echo -e "[+] \033[38;5;148mDescargando: "$nombreMp4"\033[39m ($i)"
		#wget $servidorDescarga$i -O $nombreMp4
		#echo ''
		fun_descargarVideos
	done
	fun_final
}

function fun_noticias()
{
	fun_datosDescarga

	#Establecer datos de la serie:
	nombre=`echo $HTML | cut -d/ -f6 | cut -d\- -f1`
	hora=$(echo `echo $nombreHTML | cut -d. -f1 | cut -d\- -f2`':00')

	#Mostrar datos
	echo ''
	echo -e '\033[38;5;148m============================================\033[39m'
	echo -e '\033[38;5;148mNombre : \033[39m"'$nombre'"'
	echo -e '\033[38;5;148mHora   : \033[39m"'$hora'"'
	echo ''
	echo -e '\033[38;5;148mSe descargarán las partes: \033[39m'
	for i in `cat *.xml | grep .mp4 | cut -d[ -f3 | cut -d] -f1`
	do
		nombreMp4=$nombre'-'$hora'_parte'`echo $i | cut -d. -f1 | cut -d/ -f6`'.mp4'
		echo $nombreMp4" ($i)"
	done
	echo -e '\033[38;5;148m============================================\033[39m'
	echo ''
	echo ''
	sleep 4

	#Sacar caps de .xml y descargar los caps.:
	for i in `cat *.xml | grep .mp4 | cut -d[ -f3 | cut -d] -f1`
	do
		nombreMp4=$nombre'-'$hora'_parte'`echo $i | cut -d. -f1 | cut -d/ -f6`'.mp4'
		echo -e "[+] \033[38;5;148mDescargando: "$nombreMp4"\033[39m ($i)"
		#wget $servidorDescarga$i -O $nombreMp4
		#echo ''
		fun_descargarVideos
	done
	fun_final
}

function fun_tvmovie()
{
	fun_datosDescarga

	#Establecer datos de la serie:
	tvmovie=`echo $HTML | cut -d/ -f6`
	capitulo=`echo $nombreHTML | cut -d\- -f2 | cut -d. -f1`

	#Mostrar datos de la tv-movie
	echo ''
	echo -e '\033[38;5;148m============================================\033[39m'
	echo -e '\033[38;5;148mTV Movie : \033[39m"'$tvmovie'"'
	echo -e '\033[38;5;148mCapitulo : \033[39m"'$capitulo'"'
	echo ''
	echo -e '\033[38;5;148mSe descargarán las partes: \033[39m'
	for i in `cat $nombreXML | grep .mp4 | cut -d[ -f3 | cut -d] -f1`
	do
		nombreMp4=$tvmovie'-cap0'$capitulo'_parte'`echo $i | cut -d. -f1 | cut -d/ -f6`'.mp4'
		echo $nombreMp4" ($i)"
	done
	echo -e '\033[38;5;148m============================================\033[39m'
	echo ''
	echo ''
	sleep 4
	
	#Sacar caps de .xml y descargar los caps.:
	for i in `cat $nombreXML | grep .mp4 | cut -d[ -f3 | cut -d] -f1`
	do
		nombreMp4=$tvmovie'-cap0'$capitulo'_parte'`echo $i | cut -d. -f1 | cut -d/ -f6`'.mp4'
		echo -e "[+] \033[38;5;148mDescargando: "$nombreMp4"\033[39m ($i)"
		#wget $servidorDescarga$i -O $nombreMp4
		#echo ''
		fun_descargarVideos
	done
	fun_final
}

###############################
########## MODO NORMAL ########
###############################

#El siguiente tambien sirve para series normal
function fun_programa_normal()
{
	OPC2=`echo $HTML | cut -d/ -f6`
	fun_descargaHtml

	if [ $OPC2 = 'eres-fan' ]
	then
		#Establecer nombre de archivos (mejorar esto ¿sed y awk?):
		nombreHTML=`echo $HTML | cut -d. -f2-4 | cut -d\/ -f6`
	else
		#Establecer nombre de archivos (mejorar esto ¿sed y awk?):
		nombreHTML=`echo $HTML | cut -d. -f2-4 | cut -d\/ -f5`
	fi

	XML=`cat $nombreHTML | grep ".addVariable(\"xml\"" | cut -d\" -f4`

	if [ $OPC2 = 'eres-fan' ]
	then
		nombreXML=`echo $XML | cut -d/ -f10`
	else
		nombreXML=`echo $XML | cut -d/ -f9`
	fi

	fun_descargaXML
	
	if [ $OPC2 = 'eres-fan' ]
	then
		#Establecer datos de la serie:
		programa=`echo $(echo $HTML | cut -d\/ -f5)_eres-fan`
		seccion=`echo $HTML | cut -d/ -f7`
		video=`echo $nombreHTML | cut -d. -f1 | cut -d_ -f1`
	else
		#Establecer datos de la serie:
		programa=`echo $HTML | cut -d/ -f5`
		seccion=`echo $HTML | cut -d/ -f6`
		video=`echo $nombreHTML | cut -d. -f1 | cut -d_ -f1`
	fi

	#Mostrar datos del programa 3D
	echo ''
	echo -e '\033[38;5;148m============================================\033[39m'
	echo -e '\033[38;5;148mNombre  : \033[39m"'$programa'"'
	echo -e '\033[38;5;148mSección : \033[39m"'$seccion'"'
	echo -e '\033[38;5;148mVídeo   : \033[39m"'$video'"'
	echo ''
	echo -e '\033[38;5;148mSe descargarán las partes: \033[39m'
	for i in `cat $nombreXML | grep .mp4 | cut -d[ -f3 | cut -d] -f1`
	do
		PARTE=`echo $i | cut -d. -f1 | cut -d/ -f6`
		if [ -z $PARTE  ]
		then
			PARTE="001"
		fi
		nombreMp4=$programa'_'$seccion'_'$video'_parte'$PARTE'.mp4'
		echo $nombreMp4" ($i)"
	done
	echo -e '\033[38;5;148m============================================\033[39m'
	echo ''
	echo ''
	sleep 4
	
	#Sacar caps de .xml y descargar los caps.:
	for i in `cat $nombreXML | grep .mp4 | cut -d[ -f3 | cut -d] -f1`
	do
		PARTE=`echo $i | cut -d. -f1 | cut -d/ -f6`
		if [ -z $PARTE ]
		then
			PARTE="001"
		fi
		nombreMp4=$programa'_'$seccion'_'$video'_parte'$PARTE'.mp4'
		echo -e "[+] \033[38;5;148mDescargando: "$nombreMp4"\033[39m ($i)"
		#wget $servidorDescarga$i -O $nombreMp4
		#echo ''
		fun_descargarVideos
	done
	fun_final
}

#El siguiente de noticias normal general, también sirve para Celebrities
function fun_noticias_normal()
{
	#OPC_TEMA=`echo $HTML | cut -d/ -f5`
	fun_descargaHtml

	nombreHTML=`echo $HTML | cut -d. -f2-4 | cut -d\/ -f4`

	XML=`cat $nombreHTML | grep ".addVariable(\"xml\"" | cut -d\" -f4`

	nombreXML=`echo $XML | cut -d/ -f8`

	fun_descargaXML
	
	#Establecer datos de la serie:
	programa=`echo $HTML | cut -d/ -f4`
	seccion=`echo $HTML | cut -d/ -f5`
	video=`echo $nombreHTML | cut -d. -f1 | cut -d_ -f1`

	#Mostrar datos del programa 3D
	echo ''
	echo -e '\033[38;5;148m============================================\033[39m'
	echo -e '\033[38;5;148mNombre  : \033[39m"'$programa'"'
	echo -e '\033[38;5;148mSección : \033[39m"'$seccion'"'
	echo -e '\033[38;5;148mVídeo   : \033[39m"'$video'"'
	echo ''
	echo -e '\033[38;5;148mSe descargarán las partes: \033[39m'
	for i in `cat $nombreXML | grep .mp4 | cut -d[ -f3 | cut -d] -f1`
	do
		PARTE=`echo $i | cut -d. -f1 | cut -d/ -f6`
		if [ -z $PARTE  ]
		then
			PARTE="001"
		fi
		nombreMp4=$programa'_'$seccion'_'$video'_parte'$PARTE'.mp4'
		echo $nombreMp4" ($i)"
	done
	echo -e '\033[38;5;148m============================================\033[39m'
	echo ''
	echo ''
	sleep 4
	
	#Sacar caps de .xml y descargar los caps.:
	for i in `cat $nombreXML | grep .mp4 | cut -d[ -f3 | cut -d] -f1`
	do
		PARTE=`echo $i | cut -d. -f1 | cut -d/ -f6`
		if [ -z $PARTE ]
		then
			PARTE="001"
		fi
		nombreMp4=$programa'_'$seccion'_'$video'_parte'$PARTE'.mp4'
		echo -e "[+] \033[38;5;148mDescargando: "$nombreMp4"\033[39m ($i)"
		#wget $servidorDescarga$i -O $nombreMp4
		#echo ''
		fun_descargarVideos
	done
	fun_final
}

######################################################################################################
######################################################################################################

#Presentacion:
echo '==================================='
echo '| Descargar vídeos de Antena3.com |'
echo '==================================='
echo ''

#Borra antiguos .html, .xml y .mp4 (videos) que molesten:
echo '[+] Borrando archivos antiguos'
fun_borrar

OPC=`echo $HTML | cut -d/ -f4`
OPC1=`echo $HTML | cut -d/ -f5`

#BIFURCAR:
#MODO SALÓN
if [ $OPC = 'videos' ]
then
	echo -e '\033[38;5;148m[i] MODO SALÓN\033[39m'
	echo ''
	if [ $OPC1 = 'tv-movies' ]
	then
		echo -e '\033[38;5;148m[i] Se descargará una TV Movie\033[39m'
		echo ''
		fun_tvmovie
	elif [ $OPC1 = 'noticias' ]
	then
		echo -e '\033[38;5;148m[i] Se descargarán noticias\033[39m'
		echo ''
		fun_noticias
	else
		for i in "el-internado" "los-protegidos" "fisica-o-quimica" "doctor-mateo" "karabudjan" "gavilanes" "los-hombres-de-paco"
		do
			if [ $OPC1 = $i ]
			then
				echo -e '\033[38;5;148m[i] Se descargará una serie\033[39m'
				echo ''
				fun_series
			fi
		done
	
		for i in "el-diario" "el-club-del-chiste" "informe-dec" "esta-casa-era-una-ruina" "el-secreto" "panico-en-el-plato" "curso-del-63" "operacion-momotombo" "a-fondo-zona-cero" "monica"
		do
			if [ $OPC1 = $i ]
			then
				echo -e '\033[38;5;148m[i] Se descargará un programa\033[39m'
				echo ''
				fun_programa
			fi
		done
		##Por si no entra por ninguna:
		fun_a_cascoporro
	fi
#MODO NORMAL
else
	echo -e '\033[38;5;148m[i] MODO NORMAL\033[39m'
	echo ''
	if [ $OPC = 'noticias' ]
	then
		if [ `echo $HTML | tr "/" "\n" | wc -l` -gt 6 ]
		then
			echo '.'
			fun_a_cascoporro
		fi
		echo -e '\033[38;5;148m[i] Se descargará un vídeo normal de Noticias\033[39m'
		echo ''
		fun_noticias_normal
	elif [ $OPC = 'especiales' ]
	then
		fun_a_cascoporro
	elif [ $OPC = 'celebrities' ]
	then
		echo -e '\033[38;5;148m[i] Se descargará un vídeo normal de Celebrities\033[39m'
		echo ''
		#Me sirve el mismo que el de noticas general
		fun_noticias_normal
	elif [ $OPC = 'series' ]
	then
		echo -e '\033[38;5;148m[i] Se descargará un vídeo normal de Series\033[39m'
		echo ''
		#Me sirve el mismo que el de progamas normal
		fun_programa_normal
	else
		for i in "3d" "el-club-del-chiste" "el-diario" "dec" "espejo-publico" "curso-del-63" "informe-dec" "la-ruleta-de-la-suerte" "operacion-momotombo" "megatrix" "tal-cual-lo-contamos" "quiero-cantar"
		do
			if [ $OPC1 = $i ]
			then
				echo -e '\033[38;5;148m[i] Se descargará un vídeo normal de "'$i'"\033[39m'
				echo ''
				fun_programa_normal
			fi
		done
		#Por si no entra por ningún lado
		fun_a_cascoporro
	fi
fi


##TODO: (1) Convertir a otros formatos tras descarga..
##		(2) "Validar" datos..

