#!/bin/bash

## VERSIÓN MAC Y WINDOWS SIN COLORES DE 'ECHO' EN BASH

#########################################
#	a3Downloader-4.sh					#
#	aabilio@gmail.com					#
#	http://en.wikipedia.org/wiki/WTFPL 	#
#########################################

# Válido mientras mantengan la mismas estructura de vídeos y URLs en el servidor.

#Poner a 1 si se prefiere usar axel y ni wget:
#Axel es un acelerador de descargas, tiene que estar instalado.
AXEL=0

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

function fun_validar()
{
	#Comprobar "http://"
	echo $HTML | grep ^"http://www." > /dev/null
	if [ $? -ne 0 ]; then fun_ErrorAyuda; fi
	
	#Comprobar ".html"
	echo $HTML | grep ".html"$ > /dev/null
	if [ $? -ne 0 ]; then fun_ErrorAyuda; fi
}

function fun_ErrorAyuda()
{
	echo 'ERROR, URL mal formateada'
	echo 'Lanzamiento:'
	echo '	$ '$0' [URL]'
	echo ''
	echo 'URL: Tiene que tener "http://www."'
	echo 'a3Downloader - aabilio@gmail.com'
	
	exit
}

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

	rename 's/\ /\%20/' *
}

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 . -maxdepth 1 -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()
{
	if [ "$AXEL" -eq "1" ]
	then
		axel -a $servidorDescarga$i -o $nombreMp4
		ERR=$?
	else
		wget $servidorDescarga$i -O $nombreMp4
		ERR=$?
	fi
	
	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 '[FIN] Descargas Finalizadas'
	exit
}

function fun_error()
{
	echo '[!!!] 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 "[+] Se descargará: "$programa""
	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 "[+] Descargando: "$nombreMp4" ($i)"
		
		#wget $servidorDescarga$i -O $nombreMp4
		if [ "$AXEL" -eq "1" ]
		then
			axel -a $servidorDescarga$i -o $nombreMp4
			ERR=$?
		else
			wget $servidorDescarga$i -O $nombreMp4
			ERR=$?
		fi
		
		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 '============================================'
	echo 'Serie : "'$serie'"'
	echo 'Cap   : "'$capitulo'"'
	echo 'Temp  : "'$temporada'"'
	echo ''
	echo 'Se descargarán las partes: '
	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 '============================================'
	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 "[+] Descargando: "$nombreMp4" ($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 '============================================'
	echo 'Programa : "'$programa'"'
	echo 'Fecha    : "'$fecha'"'
	echo ''
	echo 'Se descargarán las partes: '
	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 '============================================'
	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 "[+] Descargando: "$nombreMp4" ($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 '============================================'
	echo 'Nombre : "'$nombre'"'
	echo 'Hora   : "'$hora'"'
	echo ''
	echo 'Se descargarán las partes: '
	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 '============================================'
	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 "[+] Descargando: "$nombreMp4" ($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 '============================================'
	echo 'TV Movie : "'$tvmovie'"'
	echo 'Capitulo : "'$capitulo'"'
	echo ''
	echo 'Se descargarán las partes: '
	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 '============================================'
	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 "[+] Descargando: "$nombreMp4" ($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

	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
	
	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 '============================================'
	echo 'Nombre  : "'$programa'"'
	echo 'Sección : "'$seccion'"'
	echo 'Vídeo   : "'$video'"'
	echo ''
	echo 'Se descargarán las partes: '
	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 '============================================'
	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 "[+] Descargando: "$nombreMp4" ($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 '============================================'
	echo 'Nombre  : "'$programa'"'
	echo 'Sección : "'$seccion'"'
	echo 'Vídeo   : "'$video'"'
	echo ''
	echo 'Se descargarán las partes: '
	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 '============================================'
	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 "[+] Descargando: "$nombreMp4" ($i)"
		#wget $servidorDescarga$i -O $nombreMp4
		#echo ''
		fun_descargarVideos
	done
	fun_final
}

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

fun_validar

clear

#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 '[i] MODO SALÓN'
	echo ''
	if [ $OPC1 = 'tv-movies' ]
	then
		echo '[i] Se descargará una TV Movie'
		echo ''
		fun_tvmovie
	elif [ $OPC1 = 'noticias' ]
	then
		echo '[i] Se descargarán noticias'
		echo ''
		fun_noticias
	else
		for i in "el-internado" "los-protegidos" "fisica-o-quimica" "doctor-mateo" "karabudjan" "gavilanes" "los-hombres-de-paco" "share" "shin-chan" "impares" "unpasoadelante" "compa" "anhqv"
		do
			if [ $OPC1 = $i ]
			then
				echo '[i] Se descargará una serie'
				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" "decogarden" "bricomania" "la-cocina-de-karlos-arguinano" "armario-josie" "maneras-de-vivir" "mama-tu-no-mires" "el-marco" "informe-3" "operacion-malaya" "adivina-quien-viene-a-cenar" "Deberías%20saber%20de%20mi%20" "megaplayback"
		do
			if [ $OPC1 = $i ]
			then
				echo '[i] Se descargará un programa'
				echo ''
				fun_programa
			fi
		done
		##Por si no entra por ninguna:
		fun_a_cascoporro
	fi
#MODO NORMAL
else
	echo '[i] MODO NORMAL'
	echo ''
	if [ $OPC = 'noticias' ]
	then
		if [ `echo $HTML | tr "/" "\n" | wc -l` -gt 6 ]
		then
			echo '.'
			fun_a_cascoporro
		fi
		echo '[i] Se descargará un vídeo normal de Noticias'
		echo ''
		fun_noticias_normal
	elif [ $OPC = 'especiales' ]
	then
		fun_a_cascoporro
	elif [ $OPC = 'celebrities' ]
	then
		echo '[i] Se descargará un vídeo normal de Celebrities'
		echo ''
		#Me sirve el mismo que el de noticas general
		fun_noticias_normal
	elif [ $OPC = 'series' ]
	then
		echo '[i] Se descargará un vídeo normal de Series'
		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" "adivina-quien-viene-a-cenar" "arena-mix" "la-cocina-de-karlos-arguinano"
		do
			if [ $OPC1 = $i ]
			then
				echo '[i] Se descargará un vídeo normal de "'$i'"'
				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) Añadir soporte para los vídeos de forma normal que tienen varios en la misma página 

