#!/bin/bash
############################################################################################
# Taltan - http://www.taltan.fr - ola.taltan_AT_laposte.net                                #
############################################################################################
# Script exif_photos_rename_v1.2.sh                                                        #
# Licence : GNU / GPL                                                                      #
############################################################################################
# Renomme les photos selon les données EXIF sous la forme :                                #
# ${aa}-${mm}-${jj}_${hh}.${min}_${numero}.ext  => ex : 20061104_19.41_007.jpg             #
# Fonctionne pour une numérotation de 001 à 999                                            #
############################################################################################
# Dépendances                                                                              #
############################################################################################
#  - Nécessite le paquet exiftool : http://www.sno.phy.queensu.ca/~phil/exiftool/          #
#  - Nécessite le paquet zenity : http://library.gnome.org/users/zenity/index.html.fr      #
#    => sudo apt-get install libimage-exiftool-perl zenity                                 #
############################################################################################
# 15/07/07 - v1.0 - Création                                                               #
# 27/07/07 - v1.1 - Réorganisation                                                         #
#                 - Choix du début de numérotation, par défaut à 1                         #
# 09/07/08 - v1.2 - Remplacement de imagemagick par exiftool pour le traitement            #
#                 - Ajout boîte de dialogue de barre de progression en pourcentage         #
############################################################################################
## Variables
nb_param="$#" 
erreur=0
typeset -i CNT=1
typeset -i CUR=0

## Fonctions début de numérotation
début_numerot ()
{
	  	numParam=`zenity --title "Début de numérotation" --entry-text="1" --entry --text "Par défaut à 1, à modifier le cas échéant :"`
		if  [ $? != 0 ]; then
			exit 1
		fi
			[ $? -ne 0 ] && exit 2 # Annulation
}

## Fonctions renommage des fichiers
rename_jpeg ()
{
	for parametre in "$@";
	do
		old_name="$parametre"
		date_time=`exiftool "$parametre" | grep "Create Date"`
		extension=`echo $parametre | awk -F "." '{print $NF}'`
		aa=`echo $date_time | cut -d: -f2 | cut -c2-5`
		mm=`echo $date_time | cut -d: -f3`
		jj=`echo $date_time | cut -d: -f4 | cut -c1-2`
		hh=`echo $date_time | cut -d: -f4 | cut -c4-5`
		min=`echo $date_time | cut -d: -f5`	
		if [ $numParam -gt 0 ] && [ $numParam -lt 10 ]; then
			numero=00$numParam
		fi
		if [ $numParam -gt 9 ] && [ $numParam -lt 100 ]; then
			numero=0$numParam
		fi
		if [ $numParam -gt 100 ] ; then
			numero=$numParam
		fi
		new_nane=`echo ${aa}${mm}${jj}_${hh}.${min}_${numero}.${extension}`
		cp "$old_name" "${new_nane}"

		if [ $? = 0 ] ; then	
			echo "${old_name} => ${new_nane} .... OK" >> /tmp/exif_photos_rename.log
			rm -f "$old_name"
		else
			echo "Impossible de renommer $old_name .... NOK" >> /tmp/exif_photos_rename.log
			let $[erreur += 1]
		fi		
		CUR=$CNT*100/$nb_param
		echo $CUR
		echo "#Traitement de $nb_param photos\n${old_name} => ${new_nane} ... en cours\n\nAvancement: $CUR %\n "		
		CNT=$CNT+1
		let $[numParam += 1]
	done
	nb_renomme=$(( $nb_param - $erreur ))
	if [ $erreur != 0 ] ; then
		touch /tmp/exif_photos_rename.err	
		echo "#Fin de traitement : $nb_param fichiers\n\nFichiers renommés : $nb_renomme\nFichiers impossible à renommer : $erreur\n\n _!!_ Cliquer sur Valider pour afficher le rapport de traitement _!!_\n"
			
	else
		echo "#Fin de traitement : $nb_param fichiers\n\nFichiers renommés : $nb_renomme\nFichiers impossible à renommer : $erreur\n\nOK, vous pouvez fermer en cliquant sur Valider !\n"
	fi
}

## Fonctions affichage du rapport de traitement
affich_log ()
{
if [ -f /tmp/exif_photos_rename.err ] ; then
	cat /tmp/exif_photos_rename.log | zenity --text-info --title "/tmp/exif_photos_rename.log" --width=500 --height=500
fi
rm -f /tmp/exif_photos_rename.log
rm -f /tmp/exif_photos_rename.err
}

## Traitement
if [ "$#" -eq 0 ]; then
	zenity --error --title="error" --text="Selectioner au moins 1 fichier"
	exit 1
fi
début_numerot
rename_jpeg "$@" | zenity --progress --title="exif_photos_rename" --percentage=0
affich_log
