#!/bin/bash

# sh-a-gal (shell picture gallery maker)
# 
# wersja nie do rozpowszechniania
# najnowsza wersja bedzie dostepna na stronie http://odya.net/proj/shagal/
#
# TODO:
# - dodac wszedzie sprawdzanie bledow
# - dodac obsluge podkatalogow
# + dodac wybieranie lokalizacji pliku CSS (wzgledna i bezwzgledna)
# - dopracowac wykorzystanie wielowatkowosci
# - dodac sprawdzenie czy przy zmianie nazw nie ma duplikatow/cos sie nie nadpisuje
# - dorobic obsluge plikow video
# - dorobic tryb interaktywny (pytanie o rozdzielczosci, tworzenie miniatur itp.)
# - dorobic polska/angielska wersje plus polskie znaki na wygenerowanych stronach www
#


fname="index.html"
res="800x600"        # WIDTHxHEIGHT
resthumb="200x150"   # WIDTHxHEIGHT
cssurl="http://odya.net/ico/album.css" # full URL, absolute or relative, i.e. http://some/place.css, /some/place.css or some/place.css
time1=`date +%s`
cpus=`grep processor /proc/cpuinfo | wc -l`
#naglowek=`echo -e "<html><body><head>\n<style type=\"text/css\">\nIMG { font-style: normal; text-decoration: none; color: #000000; font-weight: bold; margin: 3px;}\n</style>\n</head>"`
nagloweklista=`echo -e "<html><head>\n<link rel=stylesheet href=\"$cssurl\">\n</head><body id=\"poczatek\">"`
naglowekpikczer=`echo -e "<html><head>\n<link rel=stylesheet href=\"$cssurl\">\n</head><body id=\"poczatek\">"`


echo $cssurl | grep -q ^/ || echo $cssurl | grep -q "tp://" || naglowekpikczer=`echo -e "<html><head>\n<link rel=stylesheet href=\"../$cssurl\">\n</head><body id=\"poczatek\">"`

data=`date +"%Y/%m/%d %T"`
resx=`echo $res|awk -Fx '{print $1}'`
resy=`echo $res|awk -Fx '{print $2}'`
resthumbx=`echo $resthumb|awk -Fx '{print $1}'`
resthumby=`echo $resthumb|awk -Fx '{print $2}'`

info_o_archiwum=0    # dodaje informacje i link o archiwum ze wszystkimi plikami
tworz_archiwum=0     # tworzy archiwum ze wszystkimi zdjeciami
tworz_miniatury=1    # tworzy miniatury (w katalogu /thumbs)
tworz_pomniejszone=1 # tworzy pomniejszone zdjecia (w katalogu /medium)
kumaj_filmy=1        # obsluga filmow (pokazuja sie na liscie)

# -------------------------- lepiej nie zmieniaj nic pod ta linia -----------

netver=`wget -O- -q http://odya.net/proj/shagal/VERSION`
prodname="shagal"
prodver="0.1"
prod="$prodname $prodver"
produrl="http://odya.net/proj/shagal/"

echo "INFO: $prod"
[[ `echo $netver|awk -F: '{print $1}'|tr -d \.` -gt `echo $prodver|tr -d \.` ]] && echo "INFO: Dostepna jest nowsza wersja skryptu. Mozesz ja pobrac, ze strony $produrl" || echo "INFO: Posiadasz najnowsza wersje skryptu."

which jhead 1> /dev/null \
  && jhead=`which jhead` 1> /dev/null \
  || { echo "ERR: Nie znaleziono programu JHEAD wykorzystywanego do pozyskiwania danych EXIF. Mozna go pobrac ze strony http://www.sentex.net/~mwandel/jhead/"; exit 1; }
[ -d thumbs ] || mkdir thumbs
[ -d medium ] || mkdir medium

rename .JPG .jpg *.JPG &> /dev/null || rename 's/JPG/jpg/' *.JPG &> /dev/null 
#rename .JPEG .jpg *.JPEG &> /dev/null || rename 's/JPEG/jpg/' *.JPEG &> /dev/null 
#rename .jpeg .jpg *.jpeg &> /dev/null || rename 's/jpeg/jpg/' *.jpeg &> /dev/null 

ls|grep -qi jpg$ || { echo "ERR: Nie znaleziono zadnych plikow JPG... Wychodze!"; exit 1; }

echo -n "INFO: Wykryto procesorow: $cpus"; [ $cpus -gt 1 ] || echo " (przetwarzanie bez pracy w tle)" && echo " (przetwarzanie z praca w tle)"
[ $info_o_archiwum -ne 0 ] && echo "OPCJE: Z informacja (linkiem) o archiwum" || echo "OPCJE: Bez informacji (linku) o archiwum" 
[ $tworz_archiwum  -ne 0 ] && echo "OPCJE: Tworzenie archiwum" || echo "OPCJE: Archiwum nie zostanie utworzone" 
[ $tworz_miniatury -ne 0 ] && echo "OPCJE: Tworzenie miniatur" || echo "OPCJE: Miniatury nie zostana utworzone" 
[ $tworz_pomniejszone -ne 0 ] && echo "OPCJE: Tworzenie pomniejszonych zdjec" || echo "OPCJE: Zdjecia pomniejszone nie zostana utworzone" 

# ------------------------------------------------------

pwd=`pwd`; nazwatar="`basename $pwd`.tar";

echo "-----------------------------------------------------------------------"

echo $nagloweklista > $fname

cnt=0;
for a in *.jpg ; do pliki[$cnt]=$a; cnt=$(($cnt+1)); done

cnt=0;
for a in *.avi ; do plikiavi[$cnt]=$a; cnt=$(($cnt+1)); done

echo "<a href=\"..\"><img src=\"/icons/back.png\" border=0></a>" >> $fname
echo -e "<font size=\"+2\">| Liczba zdjec w tym albumie: ${#pliki[@]}, laczna objetosc `du -hc *.jpg | tail -n 1 | awk '{print $1}'`B</font>" >> $fname
[[ $info_o_archwium -eq 1 ]] && { echo -e "<a href="$nazwatar">pobierz wszystkie jako archiwum</a>" >> $fname ; }
echo -e "<hr size=1 noshade><div class=\"kontener\">" >> $fname

cnt=0;
while [ $cnt -lt ${#plikiavi[@]} ] ; do
 echo ${plikiavi[$cnt]};
 nazwa=${plikiavi[$cnt]}
 nazwapliku=`echo $nazwa | tr _ \  | sed 's/.avi//' | cut -c -42`
 mplayer -really-quiet $nazwa  -ss 1 -frames 1 -vo jpeg
 convert 00000001.jpg -resize $resthumb -size $resthumb xc:black +swap -gravity center -composite -quality 80% "thumbs/$nazwa.jpg.jpg"
 composite  -gravity southeast ca.png "thumbs/$nazwa.jpg.jpg" "thumbs/$nazwa.jpg"
 rm -f 00000001.jpg "thumbs/$nazwa.jpg.jpg"
 echo -e "\t<div class=\"fota\" id=\"fota_$cnt\"><a href=\"$nazwa\"><img src=\"thumbs/$nazwa.jpg\" width=$resthumbx height=$resthumby border=1></a><br>\n\t$nazwapliku&nbsp;" >> $fname
 echo -e "\t<div><span class=\"opisthumbnrzdjecia\">$(($cnt+1))</span><span class=\"opisthumb\">KLIP WIDEO</span></div></div>" >> $fname
 cnt=$(($cnt+1));
done

cntavi=$cnt;
cnt=0;


while [ $cnt -lt ${#pliki[@]} ] ; do
 nazwa=${pliki[$cnt]}
 echo Przetwarzam plik $(($cnt+1)) z ${#pliki[@]}: $nazwa
[[ $tworz_miniatury -eq 1 ]] && { echo -ne "\tTworze miniature - thumbnail (res $resthumb)... ";
				  [[ $cpus -gt 1 ]] && ( echo "(w tle)"; convert "$nazwa" -resize $resthumb -size $resthumb xc:black +swap -gravity center -composite -quality 80% "thumbs/$nazwa" & ) \
				  	            || ( convert "$nazwa" -resize $resthumb -size $resthumb xc:black +swap -gravity center -composite -quality 80% "thumbs/$nazwa" && echo DONE || echo ERROR ; )
	                        }
[[ $tworz_miniatury -eq 1 ]] && {  echo -ne "\tTworze pomniejszony obraz (res $res)... "; convert "$nazwa" -resize $res -quality 85% "medium/$nazwa"  && echo DONE || echo ERROR ; }
 producentaparatu=`$jhead "$nazwa" | grep "Camera make" | awk -F\: '{print $2}' | cut -c 2-  | tr [:upper:] [:lower:]| sed 's/eastman kodak company//'`
 modelaparatu=`$jhead "$nazwa" | grep "Camera model" | awk -F\: '{print $2}' | cut -c 2- | sed 's/DIGITAL CAMERA//'| sed 's/DIGITAL CAM//' | tr [:upper:] [:lower:]`
 wykonano=`$jhead "$nazwa" | grep "Date/Time" | cut -c 16-`
 resmed=`$jhead "medium/$nazwa" | grep "Resolution" | cut -c 16- | tr -d \ `
 resmedx=`echo $resmed|awk -Fx '{print $1}'`
 resmedy=`echo $resmed|awk -Fx '{print $2}'`
 nazwapliku=`echo $nazwa | tr _ \  | sed 's/.jpg//' | cut -c -42`
 picfilename="medium/`echo $nazwa|sed 's/.jpg/.html/'`"
 
# echo -e "<div style=\"display: block; float: left; font-family: arial; font-size: 9px; text-align: center;\">" >> $fname
# echo -e "\t<a href=\"medium/$nazwa\"><img src=\"thumbs/$nazwa\" width=$resthumbx height=$resthumby border=1></a><br>\n\t$nazwapliku&nbsp;&nbsp;<br>" >> $fname
 echo -e "\t<div class=\"fota\" id=\"fota_$cnt\"><a href=\"$picfilename\"><img src=\"thumbs/$nazwa\" width=$resthumbx height=$resthumby border=1></a><br>\n\t$nazwapliku&nbsp;" >> $fname
 echo -e "\t<div><span class=\"opisthumbnrzdjecia\">$(($cnt+1))</span><span class=\"opisthumb\">$producentaparatu&nbsp;$modelaparatu</span></div></div>" >> $fname
 # <span class=\"fullres\"><a href=$nazwa target=_NEW>fullres</a></span>
 
 echo -e "\n\r\n\r" >> "$picfilename"

# echo -e "</div>" >> $fname

 echo "$naglowekpikczer<center>" > "$picfilename"
 
 cntP=$(($cnt-1))
 cntN=$(($cnt+1))
 [[ $cntP -lt 0 ]]            && { poprz="<span class=\"buttonL poprzedniBW\">poprzedni</span>"; } || { poprzedniplik=`echo ${pliki[$cntP]}|sed 's/.jpg/.html/'`; poprz="<a href=\"$poprzedniplik\" class=\"buttonL poprzedni\">poprzedni</a>"; }
 [[ $cntN -ge ${#pliki[@]} ]] && { nast="<span class=\"buttonP nastepnyBW\">nastepny</span>"; }   || { nastepnyplik=`echo ${pliki[$cntN]}|sed 's/.jpg/.html/'`; nast="<a href=\"$nastepnyplik\" class=\"buttonP nastepny\">nastepny</a>"; }
# echo "<a href=\"$poprzedniplik\" class=\"button powrot\">poprzedni</a> | <a href=\"..\">powrot</a> | <a href=\"../$nazwa\">full res</a> | <a href=\"$nastepnyplik\">nastepny</a><br>$(($cnt+1))/${#pliki[@]} :: $producentaparatu&nbsp;$modelaparatu :: $wykonano :: $nazwa<br><img src=\"$nazwa\" width=$resmedx height=$resmedy>" >> "$picfilename"
 echo "<div class=\"guziki\">$poprz | <a href=\"../$fname#fota_$cnt\" class=\"buttonL powrot\">powrot</a> | <a href=\"../$nazwa\" class=\"buttonL full\">full res</a> | $nast</div>" >> "$picfilename"
 echo "<div class=\"opis\">$(($cnt+1))/${#pliki[@]} :: $producentaparatu&nbsp;$modelaparatu :: $wykonano :: $nazwa<br><img src=\"$nazwa\" width=$resmedx height=$resmedy class=\"fotamedium\"></div>" >> "$picfilename"
 echo -e "\n\r" >> "$picfilename"
 echo "</center></body></html>" >> "$picfilename"
 cnt=$(($cnt+1));
 
 done

# zamkniecie kontenera
echo "</div>" >> $fname

time2=`date +%s`
time=$(($time2 - $time1))
echo -e "<div style=\"clear: both; font-family: verdana; font-size: 9px;\"><br><hr size=1 noshade><a href=\"#poczatek\">Powrot na poczatek strony</a><br><font size=1>Generated <b>$data</b> in <b>$time seconds</b> by <a href=\"$produrl\"><b>$prod</b></a></font></div>" >> $fname
echo "</body></html>" >> $fname


[[ $tworz_archiwum -eq 1 ]] && { tar -c ${pliki[@]} > "$nazwatar" ; }

