#!/bin/bash

#proměnné
#streamtype upravit na wm3 - pokud existuje - stahuje TV kvalitu, je li dostupná
url_raw="$1" #hlavní vstup
url_raw=$(echo "$url_raw" | sed 's/\/$//')
if (echo "$url_raw" | grep -qv '/?streamtype'); then
        url="${url_raw}/?streamtype=WM3"
else
	url="$url_raw"
fi
data=$(curl -s "$url") #data stažená
download=$2 #nepovinný parametr
cesta=$3 #uživatelsky definovaný adresář pro uložení

#definice funkcí
#nápověda
napoveda() {
	if [ "$url_raw" == "" ]; then
		echo -e "\n\t\t\t\e[1;33m *** Nápověda ***\e[0;33m\n\n\tK použití je třeba zadat URL stránky s videem konkrétního pořadu.\n\tCestu dejte raději do uvozovek - znak & smí být jen v uvozovkách.\n\n\t\e[1;33m Např: $0 \"http://www.ceskatelevize.cz/ivysilani/208522161400014-vypravej\" -d \"/tmp\"\n\n\t\e[0;33m\"-d\" je nepovinný parametr a slouží k uložení videa do souboru. \n\tCestu k adresáři kam uložit můžete určit vlastní zadáním třetího parametru. \n\tProgram vyžaduje nainstalovaný sed a curl. K přehrávání vyžaduje mít nainstalovaný mplayer.\e[0m"
		exit
	fi
}

#test dostupnosti stránky
stranka() {
	if [ "$data" == "" ]; then
		echo -e "\n\t\e[1;31mNepodařilo se stáhnout žádná data - je \e[1;33m\"$url_raw\" \e[1;31mplatná URL adresa ?\n\t\e[0;31mZkontrolujte internetové připojení. \n\t\e[1;31mFatální chyba, bohužel končím!\e[0m"
		exit
	fi
}

#URL playlistu leží v <param name="url" value="URL" uloží se do proměnné
playlist_url() {	
	playlist_url=$(echo "$data" | sed -n -r 's/.*<param name="url" value="([^"]*)" \/.*>/\1/p')
	#když se stahne html ale není tam <param name="url" value="něco" / >
	if [ "$playlist_url" == "" ]; then
		echo -e "\n\t\e[1;31mBohužel nelze žádným způsobem zjistit URL asx playlistu videa.\n\t\e[0;31mJste na správné stránce s videem pořadu ze serveru http://www.ceskatelevize.cz/ivysilani ? \n\t\e[1;31mToto je kritická chyba - KONČÍM ! \e[0m"
		exit
	fi
}

#parsovat čistou URL pořadu - bez REKLAMY z dat na $playlist_url
video_url() {
	playlist_data=$(curl "$playlist_url" -s -A "Windows-Media-Player/11.0.5721.5145")

	if [ "$playlist_data" == "" ];then
		echo -e "\n\t\e[1;31mData asx playlistu se nepodařilo stáhnout ! \e[0m\n\t\e[1;31mToto je KRITICKÁ CHYBA - kontaktujte autora."
	fi

	#test jetli playlist obsahuje reklamy
	reklamy=$(echo "$playlist_data" | grep ctupload)
	#jsou reklamy
	if [ "$reklamy" ];then
		#$ivy - 1.způsob = archiv CT - vetsina poradu iVysilani
		archiv=$(echo "$playlist_data" | sed -r -n 's/.*<REF HREF="(.*iVysilani.*[^&]==)&.*/\1/p')
		#live - 2. zpusob = Live vysilání ČT1, ČT2, ČT4
		live=$(echo "$playlist_data" | sed -r -n 's/.*<REF HREF="(.*nacevi.cz.*[^&]==)&.*/\1/p')			
		if [ "$archiv" ];then
			video_url=$(echo "$archiv" | sed 's/http/mms/')
		elif [ "$live" ];then
			video_url="$live"
		fi					
	else
	#nejsou reklamy -Live CT24
	ct24=$(echo "$playlist_data" | sed -r -n 's/.*<REF HREF="(.*[^&]==)&.*/\1/p')
	video_url="$ct24"
	fi
	#nepovedlo se - CHYBA
	if [ "$video_url" == "" ]; then
		echo -e "\n\t\e[1;31mBohužel se nepodařilo najít stream pořadu v playlistu, je to pořad z archivu ?\e[0m\n\t\e[0;31mBohužel KONČÍM - Oznamte chybu autorovi programu.\e[0m"
		exit
	fi
}

#test jestli zadaná cesta existuje a lze do ní zapisovat - závisí na funkci název
cesta() {
	nazev
	if [ "$cesta" == "" ]; then
		soubor=$nazev	
	elif [ ! -d $cesta ]; then
		echo -e "\n\t\e[1;31mCesta:\e[1;34m$cesta\e[1;31m není adresář ! \n\tZadejte platný adresář s právem k zápisu!\e[0m"
		exit
	elif [ ! -w $cesta ]; then
		echo -e "\n\t\e[1;31mV adresáři \e[1;34m$cesta \e[1;31m nemáte přístup k zápisu! \n\t\e[1;31mZadejte jiný adresář s právem k zápisu.\e[0m"
		exit
	else
		cesta=$(echo "$cesta" | sed 's/\/$//')
		soubor="$cesta/$nazev"
	fi
}

#vytvořit název z tagu <title>
nazev() {
	#z tagu <title>
	title=$(echo "$data" | sed -r -n 's/.*<title>([^>]*)<\/title>/\1/p' | sed 's/&.*\;\|\/\|&\|\;\|:\|$\|\r//g')
	if [ "$title" ]; then
		nazev="${title}.wmv"
	else
		echo -e "\n\t\e[0;31mNázev videa z tagu <h1> nebo <h1 id="detail_header"> se nepodařilo zjistit.\n\t\e[1;33mVideo bude pojmenováno podle data: $(date +%F-%T)-stream.mp4\e[0m"
		nazev="$(date +%F-%T).wmv"
	fi
}
#konec definic funkcí


#vlastní program
napoveda
stranka
echo -e "\n\t\e[1;32mStránka \e[1;33m\"$url\"\e[1;32mje dostupná.\e[0m"
playlist_url
echo -e "\n\t\e[1;32mNalezena URL asx playlistu: \e[1;33m\"$playlist_url\"\e[0m"
video_url
echo -e "\n\t\e[1;32mNalezena stream URL: \e[1;33m\"$video_url\"\e[0m"
cesta
nazev
echo -e "\n\t\e[1;32mNázev videa bude: \e[1;33m\"$nazev\"\e[0m"


#zpracování dat
#uložení do souboru
if [ "$download" == "-d" ]; then
	echo -e "\n\t\e[1;32mUkládám video do \e[1;33m$soubor\e[0m\n"
	mplayer -msglevel all=-1 "$video_url" -dumpstream -dumpfile "$soubor" && echo -e "\n\t\e[1;32mStahování souboru \e[1;33m$soubor bylo dokončeno.\e[0m" || echo -e $chyba1 && exit
#nebo přímé přehrátí
elif [ "$download" == "" ]; then
	echo -e "\n\t\e[1;32mPřehrávám video \e[1;33m $nazev \e[1;32mz adresy \e[1;33m$video_url\e[0m"
	mplayer -cache 4000 -msglevel all=-1 "$video_url" && echo -e "\n\t\e[1;32mPřehrávání dokončeno.\e[0m" || echo -e $chyba2 && exit
else
	echo -e "\n\t\e[1;31mParametr: \e[1;33m$download\e[1;31m není platný.\e[0;31m\n\tPro stažení zadejte parametr: \e[1;33m-d\e[0m"
	exit
fi
