#!/bin/bash
#
#Beschreibung: Erstellt einen HTML-Diashow aus einem Verzeichnis mit Fotos
#
#benötigt: identify, convert
#
#Aufruf: mkdiashow.sh [-s size] [-t targetdirectory} [-h Headline] [-p Pause] [-e Extension] [Pfad]
#
#Hinweise und Fehler an tuxator@tuxator.de 
#
#Status: in Bearbeitung
###################################################################
#Usage:                                                           #
#-s	Größe der Bilder                                          #
#-t     Zielverzeichnis                                           #
#-h     Überschrift                                               #
#-p     Pause in Millisekunden                                    #
#-e     Dateinamenserweiterung                                    #
#Pfad	zu druchsuchender Pfad                                    #
###################################################################
targetdir=~/diashow
thumbs=/thumbs/
pictures=/pictures/
greathtml=diashow.htm
thumbhtml=thumbnails.htm
jsfile=images.js
thumbsize="150x112"
greatsize="800x600"
headline="Bilder von meinem letzten Urlaub"
pause=4000
ext=jpg
currentifs=${IFS}
typeset -i count=0
#Funktionen
#######################################################################################################################################################
function var2html()
{
html=$(echo ${1} | sed -e 's/ä/\&auml;/g' -e 's/ö/\&ouml;/g' -e 's/ü/\&uuml;/g' -e 's/Ä/\&Auml;/g' -e 's/Ö/\&Ouml;/g' -e 's/Ü/\&Uuml;/g' -e 's/ß/\&szlig;/g')
echo ${html}
}
######################################################################################################################
if [ -e /usr/bin/convert ] && [ -e /usr/bin/identify ]; then
	#Abfrage der Parameter
	while getopts "s:t:h:p:e:" opt
		do
		case ${opt} in
			s ) greatsize=${OPTARG} ;;
			t ) targetdir=${OPTARG} ;;
			h ) headline=$(var2html ${OPTARG}) ;;
			p ) pause=${OPTARG} ;;
			e ) ext=${OPTARG} ;;
		esac
	done
	shift $(($OPTIND -1 ))
	#wenn kein Verzeichnis übergeben
	#nimm aktuelles Verzeichnis
	if [ ! $1 ]; then
		currentpath=${PWD}
	else
		currentpath=${1}
	fi
	if [ ! -d ${targetdir} ]; then
		echo "Das Zielverzeichnis existiert nicht."
		echo "Soll es erstellt werden? j/n"
		read antwort
		case ${antwort} in
			j) mkdir ${targetdir} ;;
			*) exit ;;
 		esac
	fi
	cd ${currentpath}
	#Dateien finden
	#lese Verzeichnisinhalt rekursiv
	#benutze auch Verzeichnisse mit Leerzeichen
	IFS=$'\n' 
	#finde alle Fotos und schreibe deren Pfade in Array
	patharray=(`find -maxdepth 1 -iname "*${ext}" -printf "%f\n" | sort | uniq`)
	if [[ ${patharray[0]} == "" ]]; then
		echo "${0}: Verzeichnis enthält keine Bild-Dateien. Exit"
		#schreibe ursprünglichen IFS zurück
		IFS=${currentifs}
		exit
	fi
	#Ordner erstellen
	if [ -d ${targetdir}${thumbs} ]; then
		echo "Das Verzeichnis ${targetdir}${thumbs} existiert bereits!"
		echo "Sollen alle darin enthaltenen Dateien gelöscht werden? j/n"
		read antwort
		case ${antwort} in
			j) rm ${targetdir}${thumbs}/* ;;
			*) #schreibe ursprünglichen IFS zurück
			   IFS=${currentifs}
			   exit 
			   ;;
 		esac
	else
		mkdir ${targetdir}${thumbs}
	fi
	if [ -d ${targetdir}${pictures} ]; then
		echo "Das Verzeichnis ${targetdir}${pictures} existiert bereits!"
		echo "Sollen alle darin enthaltenen Dateien gelöscht werden? j/n"
		read antwort
		case ${antwort} in
			j) rm ${targetdir}${pictures}/* ;;
			*) #schreibe ursprünglichen IFS zurück
			   IFS=${currentifs}
			   exit ;;
 		esac
	else
		mkdir ${targetdir}${pictures}
	fi
	#js-Datei vorbereiten
	echo "var Bilder = new Array();" > ${targetdir}/${jsfile}
	echo "var Texte = new Array();" >> ${targetdir}/${jsfile}
	#Durchlaufe alle Bilder
	for image in ${patharray[*]}
	do
		#Thumbs erstellen
		convert -filter Cubic -resize ${thumbsize}"!" ${image} ${targetdir}${thumbs}${image}
		#Bilder anpassen
		convert -filter Cubic -resize ${greatsize}"!" ${image} ${targetdir}${pictures}${image}
		#Textdatei erstellen
		#echo "${image},\"\"" >> ${targetdir}/images.txt
		#js-Datei schreiben
		descr=`identify -format %[EXIF:DateTimeOriginal] ${image}`
		echo "Bilder[${count}]=\"${image}\";" >> ${targetdir}/${jsfile}
		echo "Texte[${count}] = \"${descr}\";" >> ${targetdir}/${jsfile}
		count=${count}+1
		echo -n "-"
	done
	echo -e "\n"
	convert -filter Cubic -resize 1x1"!" ${patharray[0]} ${targetdir}/onepixel.jpg
	#Text-Datei erstellen
	
	#Bildgröße anpassen
	cd ${targetdir}
	#HTML- und JavaScript-Dateien erstellen
	#thumbnails.htm########################################################################################################
	echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">" > ${thumbhtml}
	echo "<html>" >> ${thumbhtml}
	echo "<head>" >> ${thumbhtml}
	echo "<title>Meine Bilder</title>" >> ${thumbhtml}
	echo "<script language=\"JavaScript\" src=\"images.js\" type=\"text/javascript\"></script>" >> ${thumbhtml}
	echo "<script language=\"JavaScript\" type=\"text/javascript\">" >> ${thumbhtml}
	echo "<!--" >> ${thumbhtml}
	echo "var anzprozeile;" >> ${thumbhtml}
	echo "if (screen.width==800)" >> ${thumbhtml}
	echo "anzprozeile = 4;" >> ${thumbhtml}
	echo "else if (screen.width>=1024)" >> ${thumbhtml}
	echo "anzprozeile = 6;" >> ${thumbhtml} 
	echo "else" >> ${thumbhtml}
	echo "anzprozeile = 5;" >> ${thumbhtml}
	echo "document.write(\"<H1 align='center'>${headline}<\\/H1>\");" >> ${thumbhtml}
	echo "document.write(\"<table align='center'>\");" >> ${thumbhtml}
	echo "document.write(\"<tr>\");" >> ${thumbhtml}
	echo "for(i=0; i<Bilder.length; i++) {" >> ${thumbhtml}
	echo "if(i>0 && i%anzprozeile==0) {" >> ${thumbhtml}
	echo "document.write(\"<\\/tr>\");" >> ${thumbhtml}
	echo "document.write(\"<tr>\");" >> ${thumbhtml}
	echo "}" >> ${thumbhtml}
	echo "document.write(\"<td>\");" >> ${thumbhtml}
	echo "document.write('<img src=\"thumbs/'+Bilder[i]+'\" border=\"0\" onClick=\"original('+i+')\">');" >> ${thumbhtml}
	echo "document.write(\"<\\/td>\");" >> ${thumbhtml}
	echo "}" >> ${thumbhtml}
	echo "document.write(\"<\\/tr>\");" >> ${thumbhtml}
	echo "document.write(\"<\\/table>\");" >> ${thumbhtml}
	echo "function original(y) {" >> ${thumbhtml}
	echo "location.href = \"diashow.htm?\" + y;" >> ${thumbhtml}
	echo "}" >> ${thumbhtml}
	echo "//-->" >> ${thumbhtml}
	echo "</script>" >> ${thumbhtml}
	echo "</head>" >> ${thumbhtml}
	echo "<body>" >> ${thumbhtml}
	echo "</body>" >> ${thumbhtml}
	echo "</html>" >> ${thumbhtml}
	########################################################################################################################
	echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">" > ${greathtml}
	echo "<html>" >> ${greathtml}
	echo "<head>" >> ${greathtml}
	echo "<title>Diashow</title>" >> ${greathtml}
	echo "<meta http-equiv=\"imagetoolbar\" content=\"no\">" >> ${greathtml}
	echo "<script language=\"JavaScript\" src=\"images.js\" type=\"text/javascript\">" >> ${greathtml}
	echo "</script>" >> ${greathtml}
	echo "<script language=\"JavaScript\" type=\"text/javascript\">" >> ${greathtml}
	echo "<!--" >> ${greathtml}
	echo "var zeitabstand = ${pause};" >> ${greathtml}
	echo "var index = location.search;" >> ${greathtml}
	echo "index = index.substring(1, index.length);" >> ${greathtml}
	echo "var id1, id2;" >> ${greathtml}
	echo "var bildu;" >> ${greathtml}
	echo "function grBild() {" >> ${greathtml}
	echo "if (index == \"\") {" >> ${greathtml}
	echo "index = 0;" >> ${greathtml}
	echo "}" >> ${greathtml}
	echo "document.images[0].src = \"pictures/\" + Bilder[index];" >> ${greathtml}
	echo "bildu = document.getElementById(\"bildu\");" >> ${greathtml}
	echo "bildu.childNodes[0].nodeValue = Texte[index];" >> ${greathtml}
	echo "}" >> ${greathtml}
	echo "function thumbnails() {" >> ${greathtml}
	echo "clearTimeout(id1); clearTimeout(id2);" >> ${greathtml}
	echo "location.href = \"thumbnails.htm\";" >> ${greathtml}
	echo "}" >> ${greathtml}
	echo "function diashow() {" >> ${greathtml}
	echo "if (document.Knoepfe.Dia.value == \"Start\") {" >> ${greathtml}
	echo "document.Knoepfe.Dia.value=\"Stop\";" >> ${greathtml}
	echo "id1 = setTimeout(\"starten()\", zeitabstand);" >> ${greathtml}
	echo "}" >> ${greathtml}
	echo "else if (document.Knoepfe.Dia.value == \"Stop\") {" >> ${greathtml}
	echo "clearTimeout(id1); clearTimeout(id2);" >> ${greathtml}
	echo "document.Knoepfe.Dia.value=\"Start\";" >> ${greathtml}
	echo "}" >> ${greathtml}
	echo "}" >> ${greathtml}
	echo "function starten() {" >> ${greathtml}
	echo "if(index < Bilder.length - 1)" >> ${greathtml}
	echo "index++;" >> ${greathtml}
	echo "else" >> ${greathtml}
	echo "index = 0;" >> ${greathtml}
	echo "document.images[0].src = \"pictures/\" + Bilder[index];" >> ${greathtml}
	echo "bildu.childNodes[0].nodeValue = Texte[index];" >> ${greathtml}
	echo "id2 = setTimeout(\"starten()\", zeitabstand);" >> ${greathtml}
	echo "}" >> ${greathtml}
	echo "function vor() {" >> ${greathtml}
	echo "clearTimeout(id1); clearTimeout(id2);" >> ${greathtml}
	echo "if(index < Bilder.length - 1)" >> ${greathtml}
	echo "index++;" >> ${greathtml}
	echo "else" >> ${greathtml}
	echo "index = 0;" >> ${greathtml}
	echo "document.images[0].src = \"pictures/\" + Bilder[index];" >> ${greathtml}
	echo "bildu.childNodes[0].nodeValue = Texte[index];" >> ${greathtml}
	echo "}" >> ${greathtml}
	echo "function zurueck() {" >> ${greathtml}
	echo "clearTimeout(id1); clearTimeout(id2);" >> ${greathtml}
	echo "if(index > 0)" >> ${greathtml}
	echo "index--;" >> ${greathtml}
	echo "else" >> ${greathtml}
	echo "index = Bilder.length - 1;" >> ${greathtml}
	echo "document.images[0].src = \"pictures/\" + Bilder[index];" >> ${greathtml}
	echo "bildu.childNodes[0].nodeValue = Texte[index];" >> ${greathtml}
	echo "}" >> ${greathtml}
	echo "//-->" >> ${greathtml}
	echo "</script>" >> ${greathtml}
	echo "</head>" >> ${greathtml}
	echo "<body onload=\"grBild()\">" >> ${greathtml}
	echo "<table align=\"center\">" >> ${greathtml}
	echo "<tr align=\"center\">" >> ${greathtml}
	echo "<td>" >> ${greathtml}
	echo "<form name=\"Knoepfe\" id=\"Knoepfe\" action=\"javascript.diashow()\">" >> ${greathtml}
	echo "<input style=\"width: 115px\" type=\"button\" name=\"einszurueck\" value=\"&lt;\" onclick=\"zurueck()\">" >> ${greathtml}
	echo "<input style=\"width: 115px\" type=\"button\" name=\"einsvor\" value=\"&gt;\" onclick=\"vor()\">" >> ${greathtml}
	echo "<input style=\"width: 115px\" type=\"button\" name=\"Dia\" value=\"Start\" onclick=\"diashow()\">" >> ${greathtml}
	echo "<input style=\"width: 115px\" type=\"button\" name=\"Zurueck\" value=\"Thumbnails\" onclick=\"thumbnails()\">" >> ${greathtml}
	echo "</form>" >> ${greathtml}
	echo "</td>" >> ${greathtml}
	echo "</tr>" >> ${greathtml}
	echo "<tr align=\"center\">" >> ${greathtml}
	echo "<td><img src=\"onepixel.jpg\" border=\"0\" alt=\"#########\"><br>" >> ${greathtml}
	echo "<span id=\"bildu\" style=\"font-size: 12pt\">&nbsp;</span></td>" >> ${greathtml}
	echo "</tr>" >> ${greathtml}
	echo "</table>" >> ${greathtml}
	echo "</body>" >> ${greathtml}
	echo "</html>" >> ${greathtml}
	#################################################################################################################################
	IFS=${currentifs}
	echo "Erledigt!"
	echo "Thank you for using makediashow.sh"
else
	echo "Benötigte Programme nicht vorhanden."
fi
###############################################################################
#ToDo:
# das Ganze jetzt noch automatisch auf den Webserver udn es ist (fast) perfekt
###############################################################################