Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/04/2010, à 16:29

Oly

Publi' Photos, préparez rapidement vos photos pour les publiers.

Bonjour à tous,

Après plusieurs jours de développement dans l'ombre de mon clavier je vais essayé de présenté mon projet ici en espérant que celui-ci puisse être utile à certain, ou que vos commentaires puissent m'aider à l'améliorer.

Présentation

Publi' Photos est un script bash qui permet d'appliquer une licence (ou tout autre texte) en bas d'une série de photos ainsi que de les redimensionner.

Le script s'installe dans les scripts nautilus et dispose d'une interface graphique sommaire grâce à zenity.

Avec ce script vous pouvez :

   -- Ajouter une licence déjà enregistrée
   -- Ajouter une nouvelle licence
   -- Ne rien ajouter

   -- Redimensionner dans un format enregistré
   -- Redimensionner dans un nouveau format
   -- Conserver la taille de l'image

   -- Sélectionner le répertoire de destination
   -- Ajouter un préfixe et/ou un suffixe au nom de l'image

Installation

dépendances : imagemagick
dépendances optionnelles : zenity, libnotify-bin

Pour installer le script la première fois :

wget -q -O publiphoto-1.0.sh "http://takuyozora.free.fr/script/publiphotos/version/1.0.sh" && chmod +x publiphoto-1.0.sh && ./publiphoto-1.0.sh --install && rm ./publiphoto-1.0.sh

Pour une mise à jour :

publiphotos --update

Pour une mise à jour manuel :

   1: Récupéré le fichier
   2: Le rendre éxécutable
   3: Désinstaller l'ancienne version :

publiphotos --uninstall

4: Installer la nouvelle version :

./publiphotos-x.x.sh --install

Utilisation

Comme script nautilus :

Simple clique droit sur une selection de fichiers ou, clique droit sans selection puis -> Scripts -> Publi' Photos

Dans un terminal :

Options : -v ( verbose ) -r ( recursif )

publiphotos -v

Configuration

publiphotos -c

---------------

Voilà étant un peu préssé quelques lignes du code sont étrange et d'autres inutile, l'orthographe aussi laisse beaucoup à désirer..

N'hésitez pas à me soumettre vos idées et remarques.

Cordialement, Oly


code : (~= 1500 lignes )

#!/bin/bash
# Publi' Photos v1.1 beta
# Licence GNU GPL v2 , http://www.gnu.org


######################################################
##
##	Programme écrit par Olivier RADISSON
##
##	Pour fonctionner ce programme nécessite ImageMagick
##		paquets recommandés : zenity notify-send
##
##	Pour afficher l'aide du script :
##		utilisez l'option : --help
##
##	Pour installer comme script Nautilus : 
##		utilisez l'option : --install
##
##	Pour désinstaller le script :
##		utilisez l'option: --uninstall
##
##	Pour Mettre à jour le script :
##		utilisez l'option: --update
##
##	Pour modifier la configuration :
##		utilisez l'option : --config
##
##	Mode verbose :
##		utilisez l'option : --verbose
##
##	Mode réucrsif :
##		utilisez l'option : --recursif
##
##	Contact : cache.oly0690@gmail.com
##
##		Dernière modification : 25.04.2010 16:55:21
##
######################################################

### NOM & VERSION :
NOMPRG="Publi' Photos"
VERSION="1.1"
CONFIGV="1"

ALIAS="publiphotos"

### Emplacements des fichiers :
DIRPRG="/home/$USER/.publiphotos"
FILEPRG="publiphotos.sh"
DIRNAUTILUS="/home/""$USER""/.gnome2/nautilus-scripts"

### Emplacement du fichier de configuration
CONF="$DIRPRG""/publiphotos.conf"

#### URL serveur de MàJ
URL="http://takuyozora.free.fr/script/publiphotos/"

### Icone
ICONE="/usr/share/icons/gnome/scalable/emblems/emblem-photos.svg"

### Caractère de protection des espaces :
CARAESP="¡ø¡"

### Pourcentage par action
pourcentDIM=15
pourcentRES=40
pourcentTEX=45

				
### Installation depuis internet sans le script :
#
#	# wget -q -O publiphoto-1.0.sh "http://takuyozora.free.fr/script/publiphotos/version/1.0.sh" && chmod +x publiphoto-1.0.sh && ./publiphoto-1.0.sh --install && rm ./publiphoto-1.0.sh
#


########################## Definition des fonctions : ##########################
####
####

			######## Function : Fichier de configuration
			##################################
			##################################
				
				# Création du fichier de configuration
				function make_conf 
				{
					
					# Si il n'existe pas
					if [ ! -e "$CONF" ]; then
						
						if [ -e "$( echo "$*" | grep quiet)" ]; then
							echo " Aucun fichier de configuration trouvé, un nouveau sera créer. "
						fi

						# Si le dossier n'existe pas ou n'est pas inscriptible
						if [ ! -e "`dirname "$CONF"`" ] || [ ! -w "$( dirname "$CONF")" ] ; then
							
							# Création du dossier pour le fichier de configuration
							mkdir -p "$( dirname "$CONF")"
							
							# Gestion d'erreur, ou dossier -w
							if [ ! $? -eq 0 ] || [ ! -w "$( dirname "$CONF")" ] ; then
								echo " Impossible de créer le fichier de configuration "
								exit 1
							fi
						fi

						### CREATION DU FICHIER DE CONFIGURATION PAR DEFAUT
					
FICHIERDECONF="\
## Fichier de configuration v$CONFIG du programme $NOMPRG $VERSION                       \n\
##                                                                 \n\
## Pour savoir comment configurer voyez le fichier : http://takuyozora.free.fr/File/permanant/webphotos.man \n\
##                                  \n\
\n\
\n\
##### Definition des constantes générales    \n\
\n\
ZENITY=true\n\
NOTIFY=true\n\
RECUR=false\n\
\n\
## Demander : Licence à choisir | Dimension | Recursif \n\
ASKT=true\n\
ASKDIM=true\n\
ASKRECUR=true\n\
ASKDIR=false\n\
\n\
## Configuration de la sortie \n\
\n\
DOSSIER=\"$NOMPRG\"\n\
PREFIX=\"\"\n\
SUFIX=\"-publi\"\n\
\n\
## Choix de la police \n\
\n\
POLICE=\"/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf\"\n\
TPOLICE=4\n\
TOPOLICE=3\n\
BL=3\n\
\n\
## Choix des textes \n\
\n\
TEXTE=\"Creative Common by-nc-nd Oly\"\n\
TEXTE2=\"Licence Art Libre Oly\"\n\
TEXTE3=\"Copyleft Oly\"\n\
TEXTE4=\"CopyLeft \"\n\
\n\
## Choix des dimensions \n\
\n\
DIMX=1024\n\
DIMY=768\n\
DIMX2=880\n\
DIMY2=660\n\
\n\
\n\
## ESPACE POUR LA SAUVEGARDE PAR L'INTERFACE GRAPHIQUE : Rien à ajouter.  \n\
"

						echo -e "$FICHIERDECONF" >> "$CONF"
						
							

					fi
				}
				# Lecture et traitement de la configuration
				function read_conf 
				{
					## Definition des constante pour le programme

						# Lecture du fichier de configuration
						while read line
						do 
							# Eviter les commenataire
							if [ "$(echo "$line" | cut -c1)" != "#" ] && [ -n "$line" ]; then

							# Assignation des variables avec leur valeur

								# listeT contient la liste des TEXTE du fichier de configuration
								if [ -n "$(echo "$line" | cut -d= -f1 | grep "TEXTE")" ] ; then
									listeT="$listeT"" ""$(echo "$line" | cut -d= -f2-)"
								fi

								# listeD contient la liste des DIM du fichier de configuration
									if [ -n "$(echo "$line" | cut -d= -f1 | grep "DIMX")" ] ; then
										listeD="$listeD"" ""$(echo "$line" | cut -d= -f2-)"x
									elif [ -n "$(echo "$line" | cut -d= -f1 | grep "DIMY")" ] ; then
										listeD="$listeD""""$(echo "$line" | cut -d= -f2-)"
									fi

									
							eval "$(echo "$line" | cut -d= -f1)""=""$(echo "$line" | cut -d= -f2-)"

							fi

							

						done < "$CONF"
						

						# Modification des constantes

							# Autre taille pour l'effet de fond flouté
							TOPOLICE=$(( $TPOLICE * $TOPOLICE))
							BL=$(( $TPOLICE / $BL))

							# Rajout d'un choix vide et de Autre...
							listeT="$listeT"" ""\"Sans Licence...\""" ""Autres..."

							# Rajout du choix "Identique..." "Autres..."
							listeD="$listeD"" ""Identique..."" ""Autres..."

							# Rajout du / si il est oublié du dossier
							if [ ! "$(echo "$DOSSIER" | cut -c${#DOSSIER})" = "/" ] && [ -n "$DOSSIER" ]; then
								DOSSIER="$DOSSIER""/"
							fi
							
							### OLD ###
							## Enregistrement relatif ou absolue  

								#~ if [ "$MODE" = "absolue" ]; then
#~ 
									#~ DOSSIER="$DOSSIER""$(basename "$(pwd)")""/"
#~ 
								#~ fi
								
				}
			

			##################################
			
			####### Function de paramètre
			
				## Lecture des paramètres
				function read_args 
				{
					
					for arg in $@ ; do
						
						if [ "$arg" = "-i" ] || [ "$arg" = "-install" ] || [ "$arg" = "--install" ]; then
							
							if [ -n "$( echo "$*" | grep quiet)" ]; then
								install --quiet
							else
								install
							fi
							
							exit 0
						elif [ "$arg" = "--uninstall" ]; then
							uninstall
							
							exit 0
						elif [ "$arg" = "-c" ] || [ "$arg" = "-config" ] || [ "$arg" = "--config" ]; then
							
							# Verification de l'existance de gedit
							if [ ! "$(gedit -h)" ]; then
							
								echo -e " Impossible d'ouvrir le fichier avec gedit. \n\n Pour configurer éditez le fichier $CONF "
								
							else
							
								gedit "$CONF"
								
							fi
							
							exit 0
						elif [ "$arg" = "-u" ] || [ "$arg" = "-update" ] || [ "$arg" = "--update" ]; then
							
							update
							
							exit 0
						elif [ "$arg" = "-h" ] || [ "$arg" = "-help" ] || [ "$arg" = "--help" ]; then
							
							print_help
							
							exit 0
						elif [ "$arg" = "-v" ] || [ "$arg" = "-verbose" ] || [ "$arg" = "--verbose" ]; then
							
							verbose=true

							
						elif [ "$arg" = "-r" ] || [ "$arg" = "-R" ] || [ "$arg" = "--recursif" ] || [ "$arg" = "-recursif" ]; then
														
							RECUR=true
							ASKRECUR=false						
						
						else
						
							echo " -- Option inconnue "
														
						fi
						
						

						
					done
					
					
					
				}
			
				## Fonction Help
				function print_help
				{
					echo	""
					echo	" --- Help: $NOMPRG $VERSION"
					echo	""
					echo	"    --recursif, -r : Active le mode récursif"
					echo	""
					echo	"    --config, -c   : Ouvre le fichier de configuration"
					echo	""
					echo	"    --update, -u   : Vérifie et installe les nouvelles mises à jour"
					echo	""
					echo	"    --install, -i  : Installe $NOMPRG"
					echo	""
					echo	"    --uninstall    : Désinstalle $NOMPRG ( --keep-conf pour garder le fichier de configuration ) "
					echo	""
					echo	"    --verbose, -v  : Affiche à l'écran toutes les informations "
					echo 	""
					echo	" ------- Pour plus d'aide lisez le fichier de manuel : "$DIRPRG"/"$ALIAS".man "
					echo	""
				}
			
			######## Function : Verification des dépendances 
			###################################
			###################################
			
				## Imagemagick ( convert )	
				function dep_convert 
				{
					
					if  [ ! "$(convert -h 2> /dev/null)" ]  ; then
						  echo " DEPENDANCE REQUISE > ImageMagick  -- essayer: sudo apt-get install imagemagick "
						  
						  if [ "$ZENITY" = true ] && [ ! "$1" = "--quiet" ]; then
								zenity --warning --title="Dependance manquante" --text="<b> Installer le paquet </b> : imagemagick "
						  fi
						  
						  exit 1
					fi
				}
				##########################
				
				## Zenity
				function dep_zenity 
				{
								
					if  [ ! "$(zenity -h 2> /dev/null)" ] && ( [ "$ZENITY" = true ] || [ "$1" = "--quiet" ] ); then
						  echo " DEPENDANCE REQUISE > Zenity  -- essayez: sudo apt-get install zenity # ou modifier avec l'option: -config"
						  ZENITY=false
					fi
					
				}
				##########################
				
				## Notify-send
				function dep_notify 
				{
					
					if [ "$( notify-send --help 2> /dev/null)" ] && ( [ "$NOTIFY" = true ] || [ "$1" = "--quiet" ] ) ; then
						NOTIFY=true
					else
						
						if [ "$NOTIFY" = true ]; then
							echo " DEPENDANCE REQUISE > Notify-send  -- Il manque le paquet : notify-send  # ( Vous pouvez desactiver l'option avec $ALIAS -c )"
						fi
						
						NOTIFY=false
					fi
					
				}
				##########################
				
			###################################
			
			######## Function vérifier MàJ
			
				## Vérifier la présence de MàJ 
				function verif_maj
				{
					## Récupération des informations de version
					wget -q -O "/tmp/""$NOMPRG""-version.lst" "$URL""/version/version.lst" 2> /dev/null
					
					C_version=$( echo "$VERSION" | cut -d. -f1 )
					C_level=$( echo "$VERSION" | cut -d. -f2 )
					
					N_version="$(cat "/tmp/""$NOMPRG""-version.lst" 2> /dev/null | grep VERSION | cut -d"=" -f2)"
					N_level="$(cat "/tmp/""$NOMPRG""-version.lst" 2> /dev/null | grep LEVEL | cut -d"=" -f2)"
					
					if ( [ $N_version -gt $C_version ] || [ $N_version -eq $C_version ] && [ $N_level -gt $C_level ] ) ; then
					
						echo "Nouvelle version disponible, pour l'installer:   $ALIAS -u"
						
					else
						echo ""
					fi
					
				}
					
			######## Function : Installation / Désinstallation / Update
			
				## Installation ( -i / --install / -install )
				function install
				{
					
					if [ -n "$( echo "$*" | grep quiet)" ]; then
						quiet=true
					else
						quiet=false
					fi
					
					# Verification de la possibilité d'écrire dans les repertoires d'installation.
					if [ -w "$DIRPRG" ] && [ -w "$DIRNAUTILUS" ]; then
					
						if [ ! "$quiet" = true ]; then
							echo 	""
							echo 	"--- $NOMPRG $VERSION"
							echo 	""
							echo 	""
							echo 	" -- Verification des dépendances :"
							echo 	""
							echo -n	"		* ImageMagick .. "
						fi
							
							if [ -n "$(dep_convert --quiet | grep "DEPENDANCE REQUISE")" ]; then								
								
								if [ ! "$quiet" = true ]; then echo -n ".  Introuvable. Installation... " ; fi
								
								gksudo -m " Installation des dépendances pour Publi' Photos " -D "Installation d'ImageMagick" "apt-get install imagemagick"   1> /dev/null
								if [ $? -eq 0 ]; then
								
									if [ ! "$quiet" = true ]; then echo -n " Ok" ; fi
									
								else
								
									if [ ! "$quiet" = true ]; then echo -n " Erreur ! : installez imagemagick " ; fi
									
								fi
							fi
							
							if [ ! "$quiet" = true ]; then
								echo	""
								echo -n "		* Zenity .. "
							fi
							
							if [ -n "$(dep_zenity --quiet | grep "DEPENDANCE REQUISE")" ]; then
								
								if [ ! "$quiet" = true ]; then echo -n ".  Introuvable. Installation... " ; fi
								
								gksudo -m " Installation des dépendances pour Publi' Photos " -D "Installation de Zenity" "apt-get install zenity"  1> /dev/null
								if [ $? -eq 0 ]; then
								
									if [ ! "$quiet" = true ]; then echo -n " Ok" ; fi
									
								else
									if [ ! "$quiet" = true ]; then echo -n " Erreur ! : installez zenity " ; fi
								fi
							fi
							
							if [ ! "$quiet" = true ]; then
								echo	""
								echo -n "		* Notify-send .. "
							fi
							
							if [ -n "$(dep_notify --quiet | grep "DEPENDANCE REQUISE")" ]; then
								
								if [ ! "$quiet" = true ]; then echo -n ".  Introuvable. Installation... " ; fi
								
								gksudo -m " Installation des dépendances pour Publi' Photos " -D "Installation de Notify-Send" "apt-get install libnotify-bin" 1> /dev/null
								if [ $? -eq 0 ]; then
								
									if [ ! "$quiet" = true ]; then echo -n " Ok" ; fi
									
								else
									if [ ! "$quiet" = true ]; then echo -n " Erreur ! : installez libnotify-bin " ; fi
								fi
							fi
													
						if [ ! "$quiet" = true ]; then
							echo 	""
							echo 	""
							echo -n	" -- Récupération du manuel [ Nécéssite Internet ] : "
						fi
						
						wget -q -O "/tmp/""$NOMPRG""-manuel.lst" "$URL""/version/""$VERSION"".man" 2> /dev/null
						
						if [ $? -ne 0 ]; then
							if [ ! "$quiet" = true ]; then echo	" Pas de connexion " ; fi
						else
							cp "/tmp/""$NOMPRG""-manuel.lst" "$DIRPRG"/"$ALIAS".man 2> /dev/null
							if [ ! "$quiet" = true ]; then
								echo	" Terminé "
							fi
						fi

 
						
						if [ ! "$quiet" = true ]; then
							echo 	""
							echo	""
							echo 	" Utilisation :"
							echo 	""
							echo 	"  * Pour utiliser le script, clique droit dans un dossier -> Scripts -> $NOMPRG "
							echo 	""
							echo 	"  * Pour configurer le scirpt:  $ALIAS -config "
							echo 	""
						fi
						
						## Copie des fichiers 
						cp "$0" "$DIRNAUTILUS"/"$NOMPRG" 
						cp "$0" "$DIRPRG"/"$FILEPRG"

						# Ajout de l'alias
						
							## VERIFICATION :: Ajout uniquement si inexistant :
							if [ ! "$(cat /home/oly/.bashrc | grep "alias $ALIAS='""$DIRPRG""/""$FILEPRG""'")" = "alias $ALIAS='""$DIRPRG""/""$FILEPRG""'" ]; then
								# Ajout
									echo "alias $ALIAS='""$DIRPRG""/""$FILEPRG""'" >> "/home/$USER/.bashrc"
							fi
						
						if [ ! $? -eq 0 ] && [ ! "$quiet" = true ]; then
							echo ""
							echo " Erreur de création de l'alias : $ALIAS='""$DIRPRG""/""$FILEPRG""'"
							echo ""
						fi
						
						if [ ! "$quiet" = true ]; then
							echo "	Installation terminé :"
							echo "   Le script est maintenant disponible sur nautilus et à l'emplacement : ""$DIRPRG"/"$FILEPRG"
							echo ""
							echo " Nouvelle configuration de: /home/$USER/.bashrc  -- Veuilliez relancer le terminal. "
							echo ""

							if [ "$ZENITY" = true ]; then
								zenity --info --window-icon="$ICONE" --title="$NOMPRG - Installation terminé" --text="<b>$NOMPRG</b> $VERSION : L'installation est terminé. \n \n $NOMPRG est disponible dans les scripts Nautilus. \n\n \t <i>Configuration:  $ALIAS --config </i>"
							fi
						fi

						exit 0;	

					else
						if [ ! "$quiet" = true ]; then
							## Message d'erreur impossible d'écrire.
							if [ "$ZENITY" = true ]; then
								zenity --warning  --window-icon="$ICONE" --title="Erreur d'installation" --text="<b>$NOMPRG</b> $VERSION :Un problème est survenu durant l'installation. \n\n\t L'un ou les deux dossier suivant ne sont pas inscriptible : \n\n \t\t $DIRNAUTILUS \n\t\t $DIRPRG \n\n <i> Pour résoudre le problème essayez : chmod 0777 ***  # remplacer ***</i> "
							fi

							echo "<b>$NOMPRG</b> $VERSION :Un problème est survenu durant l'installation. \n\n\t L'un ou les deux dossier suivant ne sont pas inscriptible : \n\n \t\t $DIRNAUTILUS \n\t\t $DIRPRG \n\n <i> Pour résoudre le problème essayez : chmod 0777 ***  # remplacer ***</i> "
							
						fi

					fi
					
					exit 0;
					
				}
				###########################
				
				## Desinstallation ( --uninstall )
				function uninstall
				{
					# Arguments :
						
						 
							if [ -n "$( echo "$*" | grep quiet)" ]; then
								quiet=true
							fi
							
							if [ -n "$( echo "$*" | grep keep-conf)" ]; then
								keepconf=true
							fi

					
					# Supression des fichiers

					rm "$DIRNAUTILUS"/"$NOMPRG" 2> /dev/null
					rm "$DIRPRG"/"$FILEPRG" 2> /dev/null
					rm "$DIRPRG"/"$ALIAS".man 2> /dev/null
					
					if [ ! "$keepconf" = true ]; then
						rm "$CONF"
						rmdir "$( dirname "$CONF")"
					fi

					# Supression de l'alias
					cat /home/oly/.bashrc | grep -v "alias $ALIAS='""$DIRPRG""/""$FILEPRG""'" > /home/oly/.bashrc
					
					# Message de supression
						if [ "$ZENITY" = true ] && [ ! "$quiet" = true ]; then
							zenity --info --window-icon="$ICONE" --title="$NOMPRG - Désinstallation terminé" --text="<b>$NOMPRG</b> $VERSION : Merci d'avoir utilisé ce script. \n\n\t\t<i> Contact: cache.oly0690@gmail.com</i>"
						fi
					
				}
				###########################
				
				## Update ( -u / -update / --update )
				function update
				{
						
							echo    ""
							echo    " ------ $NOMPRG $VERSION "
							echo	""
							echo	"  Option : [ --update ]"
							echo	""
							echo	" ---------------------------------"
							echo	""
							echo -n	" Recherche de mise à jour ."
						
						## Dans l'ordre :
						##
							# 1: verifier co internet 
							# 2: vérifier version
							# 3: récupérer fichier
							# 4: désinstallation
							# 5: nouvelle installation
							
						## Vérifie si il y a une co à internet ( ping google )
						
							if [ ! -n "$(ping -c 2 -i 0.2 www.google.com 2> /dev/null | grep "transmitted" | grep -v "0 packets transmitted")" ]; then
								
								echo	". ERREUR !"
								echo	""
								echo	" Pas de connexion à internet détécté. "
								echo	""
								echo	" ------------------------------------------- "
								
								exit 0;
								
							fi
							echo -n "."
							
						## Recuperation du fichier de version 
							
							wget -q -O "/tmp/""$NOMPRG""-version.lst" "$URL""/version/version.lst"
							
							if [ $? -ne 0 ]; then
							
								echo	". ERREUR !"
								echo	""
								echo	" Impossible de récupérer les informations de version. "
								echo	""
								echo	" ------------------------------------------- "
								
								exit 0
							fi
							echo -n "."
							
							## Etude du numéro de version
							
								C_version=$( echo "$VERSION" | cut -d. -f1 )
								C_level=$( echo "$VERSION" | cut -d. -f2 )
								
								N_version="$(cat "/tmp/""$NOMPRG""-version.lst" 2> /dev/null | grep VERSION | cut -d"=" -f2)"
								N_level="$(cat "/tmp/""$NOMPRG""-version.lst" 2> /dev/null | grep LEVEL | cut -d"=" -f2)"
								
								beta="$(cat "/tmp/""$NOMPRG""-version.lst" 2> /dev/null | grep BETA | cut -d"=" -f2)"
								config="$(cat "/tmp/""$NOMPRG""-version.lst" 2> /dev/null | grep CONFIG | cut -d"=" -f2)"
								
								B_version="$(cat "/tmp/""$NOMPRG""-version.lst" 2> /dev/null | grep B-V | cut -d"=" -f2)"
								B_level="$(cat "/tmp/""$NOMPRG""-version.lst" 2> /dev/null | grep B-L | cut -d"=" -f2)"
							
							
							echo	". Terminé"
							echo	""
							echo	""
							
							
							if ( [ $N_version -gt $C_version ] || ( [ $N_version -eq $C_version ] && [ $N_level -gt $C_level ] ) ) || [ "$beta" = true ] ; then
							
									
								if [ "$beta" = true ] ; then
									
									echo	""
									echo	" --> Une nouvelle version beta éxiste   : $NOMPRG ""$B_version"".""$B_level"" beta "
									echo	"     pour la récupérer aller sur le site: "
									echo	""
									echo	"          $URL"	
									echo	""
									echo	""
									
								fi
							
								if [ $N_version -gt $C_version ] || ( [ $N_version -eq $C_version ] && [ $N_level -gt $C_level ] ) ; then
							
									echo 	" --> Une nouvelle version majeur éxiste : $NOMPRG ""$N_version"".""$N_level"" "	
									echo	""
									
									## Si la config va être supprimée demander 
									#set -x
										if [ $config -ne $CONFIGV ]; then
										
											supr_conf=true
											
											echo	""
											echo	" /!\ ATTENTION /!\ "
											echo	""
											echo -n	" --- La nouvelle version supprimera votre configuration, continuez ? [O/n] : "
											
											read rep
											
											if [ -n "$( echo "$rep" | grep -i "n" )" ]; then
												
												echo	""
												echo	" ----> Annulation "
												echo	""
												echo	" ------------------------------------------- "
												exit 0
											fi
											echo ""
											echo ""
										fi
									
									echo -n	"   * Récupération de la version ."	
									
									
									## Recuperation de la version 
										wget -q -O "/tmp/""$NOMPRG""-new.tmp" "$URL""/version/""$N_version"".""$N_level"".sh"
										
										if [ $? -ne 0 ]; then
										
											echo	". ERREUR !"
											echo	""
											echo	" Impossible de récupérer la nouvelle version. "
											echo	""
											echo	" ------------------------------------------- "
											
											exit 0
										fi
										echo	"."
										
									echo -n	"   * Desinstallation ."
									
									## Désinstallation
										if [ "$supr_conf" = true ]; then
										
											uninstall --quiet 2> /dev/null
											
										else
											
											uninstall --quiet --keep-conf 2> /dev/null
											
										fi
										
									echo	"."
									echo -n	"   * Installation ."
									
									# Rendre executable le fichier
									chmod +x "/tmp/""$NOMPRG""-new.tmp" 2> /dev/null
									
									## Gestion d'erreur
									if [ $? -ne 0 ]; then
									
										echo ""
										echo ""
										echo "  -- ERREUR : Impossible de rendre executable le fichier :"
										echo ""
										echo "                ""/tmp/""$NOMPRG""-new.tmp" ""
										echo ""
										echo "  -- Pour résoudre le problème essayez: "
										echo ""
										echo "                chmod +x ""/tmp/""$NOMPRG""-new.tmp" ""
										echo ""
										echo	" ------------------------------------------- "
										
										exit 0
										
									fi
									
									"/tmp/""$NOMPRG""-new.tmp" -i --quiet
									
									echo -n "."
									
									## Gestion d'erreur
									if [ $? -ne 0 ]; then
										
										echo ""
										echo ""
										echo "  -- ERREUR : L'installation n'as pas réussi :"
										echo ""
										echo "  L'ancienne version sera réinstallé "
										
										install --quiet 2> /dev/null
										
										echo ""
										echo	" ------------------------------------------- "
										
										exit 0
										
									else
									
										## UPDATE REUSSI
									
										echo	". "
										echo	""
										echo	""
										echo	" ----- UPDATE TERMINÉ AVEC SUCCES -----"
										echo	""
										
									fi
										
										
									
								fi						
														
							else
								echo	" Votre version est la plus récente. "
								echo	""
								echo	" ------------------------------------------- "
								
								exit 0
							fi
								
								
					
					
					exit 0
				}
				
			
			######## Function : GUI - Demandes
			
				## Demande recursif Oui/Non
				function ask_recursif 
				{
					if [ ! "$RECUR" = "true" ] && [ "$ASKRECUR" = "true" ] && [ "$ZENITY" = true ] ; then
					
						rep="$(zenity --window-icon="$ICONE" --entry --title="Mode de selection" --text="Prendre les images dans :" --entry-text="Uniquement ce dossier" "Tout les dossiers" "Aucun")"

						# Gestion d'erreur
							if [  ! $? -eq 0 ] || [ "$rep" = "Aucun" ]; then 
								exit 0
							fi

						if [ "$rep" = "Tout les dossiers" ]; then
							RECUR=true
						else
							RECUR=false
						fi
						
					fi
					
					
				}
				
				## Demande Licence
				function ask_licence 
				{
					# Uniquement si Zenity et ASKT sont activé
					if [ "$ASKT" = true ] && [ "$ZENITY" = true ] ; then
					
						while [ 1 = 1 ]; do
							# Boite de dialogue Zenity
							TEXTE="$(eval zenity --window-icon=\"$ICONE\" --list --text=\"Choisissez une licence à appliquer\" --width=450 --height=275 --title=\"Choisissez la licence à ajouter.\" --column=\"Licence\" $listeT)"

							# Gestion d'erreur
							if [  ! $? -eq 0 ]; then 
								exit 0
							fi

							# Demande de confirmation pour choix vide
							if [ "$TEXTE" = "Sans Licence..." ]; then
								zenity --window-icon="$ICONE" --question --text="Aucune licence n'est choisie, voulez-vous continuez ?"
								if [ $? -eq 0 ]; then
									TEXTE=""
									break
								else
									continue
								fi

							# Ajout d'une Autre licence
							
							elif [ "$TEXTE" = "Autres..." ]; then

								# Recuperation de la licence
								TEXTE="$(zenity --window-icon="$ICONE" --width=350 --title="Autre Licence" --entry --text="Entrez la Licence à ajouter" --entry-text="Licence $(echo $USER | sed 's/^./\u&/')")"

								# Gestion d'erreur
								if [  ! $? -eq 0 ]; then 
									exit 0
								fi
							
							
								if [ ! "$TEXTE" = "" ]; then

									# Demande d'enregistrement
										zenity --window-icon="$ICONE" --question --text="Enregistrer la Licence pour une autre fois ?"

									# Si oui 
									if [ $? -eq 0 ]; then
										## Sauvegarde de la licence dans le fichier de conf
										echo "TEXTEgui=\"$TEXTE\"" >> "$CONF"
									fi
								
									break
								fi
							else
								break
							fi
						done
						
					fi
					
				}
			
				## Demande Dimmensions
				function ask_dim
				{
					# Uniquement si Zenity et ASKDIM sont activé
					if [ "$ASKDIM" = true ] && [ "$ZENITY" = true ] ; then
						# Boite de dialogue Zenity
						DIM="$(eval zenity --window-icon=\"$ICONE\" --list --text=\"Choisissez les valeures limites pour la redimension\" --width=350 --height=250 --title=\"Choisissez les dimensions.\" --column=\"Dimensions\" $listeD )"

						# Gestion d'erreur
						if [  ! $? -eq 0 ]; then 
							exit 0
						fi

						if [ "$DIM" = "Identique..." ]; then

							# Laisser les même dimension
							redim=false

						elif [ "$DIM" = "Autres..." ]; then

							DIM="$(zenity --window-icon="$ICONE" --title="Choix des dimensions" --entry --text="Choisissez les dimensions: Largeur x Hauteur" --entry-text="$DIMX""x""$DIMY")"

							# Gestion d'erreur
							if [  ! $? -eq 0 ]; then 
								exit 0
							fi
							
							
							if [ ! "$DIM" = "" ]; then

								# Demande d'enregistrement
									zenity --window-icon="$ICONE" --question --text="Enregistrer les dimensions pour une autre fois ?"

								# Si oui 
								if [ $? -eq 0 ]; then

									## Sauvegarde de la licence dans le fichier de conf
										echo "DIMXgui="$(echo "$DIM" | cut -d "x" -f1) >> "$CONF"
										echo "DIMYgui="$(echo "$DIM" | cut -d "x" -f2) >> "$CONF"
								
									
								fi
								
							
							fi
							
						fi
						
						DIMX=$(echo "$DIM" | cut -d "x" -f1)
						DIMY=$(echo "$DIM" | cut -d "x" -f2)	
						
					fi
					
				}
				
				## Demande du dossier où sauvegarder
				function ask_dir
				{
					
					if [ "$ASKDIR" = "true" ] && [ "$ZENITY" = true ] ; then
					
						rep="$(zenity --file-selection --directory --title="Sélectionnez l\'emplacement pour les images")"

						# Gestion d'erreur
							if [  ! $? -eq 0 ]; then 
							
								zenity --window-icon="$ICONE" --question --text="Aucun dossier choisi, voulez-vous continuez ?"
								if [ $? -eq 0 ]; then
									return 0
								else
									exit 0
								fi
							fi

						DOSSIER="$rep""/"
						
					fi
					
					
				}
					
				## Demande Ignorer / Remplacer 
				function ask_ignore 
				{
					
					## Verification qu'un fichier ne porte pas déjà le même nom

						# Un fichier existe déjà
						if [ -e "$sortie" ]; then

						# Si un choix pour Tout à déjà été fais on l'execute
							if [ -n "$remplTout" ] || [ -n "$ignorTout" ]; then

								# Ignore Tout
								if [ "$ignorTout" = true ]; then

									## Affichage de la progression

										curimg=$(($curimg + 100))
										echo $(($curimg  / $nbrimg))

									# Passage au suivant 

									continue
								fi

								# Remplacer tout = ne rien faire ici
							else
							
							# Sinon on demande

								if [ "$ZENITY" = true ]; then

									## Boite de dialogue Ignorer Remplacer 
								
									rep="$(zenity --entry --width="250" --title="Conflit entre plusieurs fichiers" --text="\t $sortie  éxiste déjà. \n\n Que voulez vous faire ? " "Remplacer" "Remplacer pour tous" "Ignorer" --entry-text="Ignorer pour tous")"

									if [ "$rep" = "Remplacer pour tous" ]; then

										# Tout remplacer [on]
										remplTout=true

									fi

									if [ "$rep" = "Ignorer pour tous" ]; then

										# Tout Ignorer [on]
										ignorTout=true

									fi
									 
									if [ ! $? -eq 0 ] || [ ! -n "$( echo "$rep" | grep "Remplacer")" ]; then

										# Si la GUI ne réponds pas
										# Ou si demande d'ignorer

										## Affichage de la progression

											curimg=$(($curimg + 100))
											echo $(($curimg  / $nbrimg))

										# Passage au suivant 

										continue						
									
									fi	
								else
									## En mode sans GUI on ignore tout
									ignorTout=true
									curimg=$(($curimg + 100))
									continue
								fi

							fi

						fi

					
				}
			
			######## Traitement :
			
				## Création du dossier de sortie
				function do_mkdir 
				{
					
					# Creation du repertoire pour les photos
					if [ ! -d "$DOSSIER" ] ; then 
						mkdir -p "$DOSSIER" 
					fi
					
				}
				
				## Creation du nom de sortie
				function set_sortie
				{
					
					## Création du nom de sortie :
					nom="$(basename "$ENTREE" | sed 's/\(.*\)\.[^\.]\+$/\1/')"
					ext="$(echo "$ENTREE" | sed 's/.*\.//')"
			
					sortie="$DOSSIER""$PREFIX""$nom""$SUFIX"".""$ext"
					
				}
			
				## Recupération des dimensions :
				function get_dim 
				{
					
					# Récupération des dimensions

					dim="$(identify "$ENTREE")"
					dim_x=$(echo "$dim" | cut -d "x" -f1 | awk -F" " '{print $NF}' )
					dim_y=$(echo "$dim" | cut -d "x" -f2 | cut -d" " -f1)
					

					## Affichage de la progression

						curimg=$(($curimg + $pourcentDIM))

							# Barre Zenity
							if [ "$ZENITY" = true ]; then
								
								echo $(( $curimg  / $nbrimg ))

								else
								
								## VERBOSE
								if [ "$verbose" = true ]; then echo -n "." ; fi
							fi
							
					
				}
				
				## Dimension contraignante
				function set_dim 
				{
					
					# Choix de la dimension contraignante
			
					if [ $dim_x -gt $dim_y ]; then
						redi=$DIMX"x"
					else
						redi="x"$DIMY
					fi
					
				}
				
				## Redimension de la photo
				function do_resize 
				{
					
					if [ ! "$redim" = false ]; then
						convert -resize $redi "$ENTREE" "$sortie"
					else
						cp "$ENTREE" "$sortie"
					fi
					
					## Affichage de la progression

								curimg=$(($curimg + $pourcentRES))

									# Barre Zenity
									if [ "$ZENITY" = true ]; then
										
										echo $(($curimg  / $nbrimg))
										else
								
										## VERBOSE
										if [ "$verbose" = true ]; then echo -n "." ; fi
									fi
					
				}

				## Ajout du texte
				function do_licence 
				{
					
					convert "$sortie" -gravity SouthEast -pointsize $TOPOLICE -font @$POLICE -stroke black -strokewidth $TPOLICE -draw "text 5,5 '$TEXTE'" -channel RGBA -blur 0x$BL -stroke none -fill white -draw "text 5,5 '$TEXTE'" "$sortie"
					
					## Affichage de la progression

								curimg=$(($curimg + $pourcentTEX))

									# Barre Zenity
									if [ "$ZENITY" = true ]; then
										
										
										if [  "echo $(( curimg / 100 ))" = "echo $nbrimg" ]; then 
										
											## Pour faire attendre la barre de progression
											
											echo 99.9
											
											sleep 0.2
											
										fi

										echo $(($curimg  / $nbrimg))
										
										else

										## VERBOSE
										if [ "$verbose" = true ]; then 
											echo -n ".  Fini !" 
											
											## Chrono temps d'execution par image
												time_img_fin=$(date +%s.%N | cut -c 1-13)
												
												time_img="$(echo "$time_img_fin - $time_img_debut" | bc)"
												
											echo " ( $time_img ) "
											
											echo "" 
										fi	

									fi
				
				}
			
			######## Expression : 
			
				## Recuperer le nombre d'image à traiter
				function get_nbrimg 
				{ 
				
					if [ "$RECUR" = true ]; then
						nbrimg="$(find | grep -E -i ".jpe?g" | wc -l)"
					else
						nbrimg="$(ls -l | grep -E -i ".jpe?g" | wc -l)"
					fi
					
				}
				
				## Definir l'expression de recherche pour la boucle
				function get_filelist
				{
					
					#### Expression de recherche 

						## Expression de base :
						expr="ls | grep -E -i \".jpe?g\" | tr \" \" \"$CARAESP\""

						## Expression recursive
						if [ "$RECUR" = true ]; then
							expr="find | grep -E -i \".jpe?g\" | tr \" \" \"$CARAESP\""
						fi
						
						filelist="$(echo "$(eval "$expr")")"
				}

				## Remplacer les espaces dans les nom de fichiers
				function do_espace 
				{
					
					ENTREE="$(echo "$ENTREE" | tr "$CARAESP" " ")"
					
				}

			######## Parsage ... :
			
				## Fonction de parsage
				function parse
				{
					
					## Remettre les espace 
							do_espace

						ENTREE="$ENTREE"
						
						
						## Resolution du nom de sortie
							set_sortie

						## VERBOSE
							if [ "$verbose" = true ] && [ ! "$ZENITY" = true ]; then 
								echo    " Image n°      : $(( $curimg / 100 + 1 )) /$nbrimg" 
								echo    " Traitement de : $ENTREE"
								echo    " Vers          : $sortie"
								echo -n " Avancement    : ."
								
								## Chrono temps d'execution par image
									time_img_debut=$(date +%s.%N | cut -c 1-13)
							fi

						
									
													

						## Connaitre l'inclinaison de la photo

							# Recupérer les dimensions
							get_dim
							# Dimension contraignante
							set_dim

							

						## Redemension de l'image 

							do_resize


						## Ajout du texte
							 
							 do_licence
							 
				}

				## Function de parsage de dossier 
				function parse_dossier
				{
					## Création du DOSSIER
					do_mkdir
					
						## Recuperation du nombre d'image
							get_nbrimg
							
							## Arret si aucune image :

								if [  $nbrimg -eq 0 ]; then
									
									if  [ "$ZENITY" = true ] ; then
										zenity --info --title="$NOMPRG" --window-icon="$ICONE" --text="<b> Aucune image à traiter </b>"
									
									elif [ "$verbose" = true ] ; then
										
										echo	""
										echo    " ------ $NOMPRG $VERSION "
										echo	""
										echo	" ------------- Aucune image à trater "
										echo	""
									fi
									
									
									exit 0;
									
								fi
								
						## VERBOSE
						#set -x
							if [ "$verbose" = true ] && [ ! "$ZENITY" = true ]; then 
							
								if [ "$RECUR" = true ]; then 
									tmp_recur="[Dans tous les dossiers]"
								else 
									tmp_recur="[Dans ce dossier]"  
								fi
								
								echo    ""
								echo    " ------ $NOMPRG $VERSION "
								echo	""
								echo	""
								echo	" Traitement de $nbrimg images $tmp_recur : "
								echo	""
								echo	"     Licence appliqué     : $TEXTE"
								echo	"     Dimensions aplliqués : ""$DIMX""x""$DIMY"
								echo	""
								echo	" ---------------------------------"
								echo	""

								#### Premier chrono tmp d'execution
									time_debut=$(date +%s.%N | cut -c 1-13)
							fi					
						
						## Définition de l'expression
							get_filelist
							
						# Image en cour = 0
						curimg=0
							
						
						
						
						for ENTREE in $filelist ; do
							
							
							parse
							
						
							
							done 
							
				 }
		
				## Fonction de parsage d'une liste de fichier nautilus
				function parse_nautilus
				{
					
					## Création du DOSSIER
					do_mkdir
					
						## Recuperation du nombre d'image
							nbrimg="$(printf %s "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | wc -l )"
							
							## Arret si aucune image :

								if [  $nbrimg -eq 0 ] && [ "$ZENITY" = true ] ; then
									
									zenity --info --title="$NOMPRG" --window-icon="$ICONE" --text="<b> Aucune image à traiter </b>"
									
									exit 0;
									
								fi
					
							
						# Image en cour = 0
						curimg=0
							
						
						## PARSAGE FINAL
						printf %s "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" |
						while read -r ENTREE
						do
						  
							parse
						 
						done
							
				}
				
				
			######## Dans un dossier :
			
				# Selection dans un dossier
				function selection_dossier
				{

					############# Dependance 

						## Verifier Image Magick
							dep_convert
							
						## Verifier Zenity
							dep_zenity
							
						## Verifier Notify-Send
							dep_notify



					## Demande recursif
							ask_recursif

							
					## Demande du texte à utiliser
							ask_licence
							

					## Demande des dimensions
							ask_dim
							
					## Demande du dossier où sauvegarder
							ask_dir
						


						### Parsage ... 

						
						if [ "$ZENITY" = true ] ; then 

							# Avec barre de progression zenity
							( parse_dossier ) | zenity --window-icon="$ICONE" --progress \
							--width=350 \
							--title="$NOMPRG" \
							--text="Traitement des photos" \
							--auto-close \
							--percentage=0 \

							# Gestion d'erreur
							if [ ! $? -eq 0 ]; then
								exit 0;
							fi

							if [ "$NOTIFY" = true ]; then
								notify-send -t 5 -i "$ICONE" "Traitement photo terminé" "$(verif_maj)"
							fi
							
						else 
							# sans barre de progression zenity
							parse_dossier
							
							#### Dernier chrono tmp d'execution
													time_fin=$(date +%s.%N | cut -c 1-13)
													
													time_total="$(echo "$time_fin - $time_debut" | bc)"
													
							
							echo -e "\n\n $NOMPRG $VERSION :: Terminé -- Durée: $time_total"
						
						fi



					exit 0
					
				}

				# Selection de fichiers pars nautilus
				function selection_nautilus
				{

					############# Dependance 

						## Verifier Image Magick
							dep_convert
							
						## Verifier Zenity
							dep_zenity
							
						## Verifier Notify-Send
							dep_notify

							
					## Demande du texte à utiliser
							ask_licence
							

					## Demande des dimensions
							ask_dim
							
					## Demande du dossier où sauvegarder
							ask_dir
						


						### Parsage ... 

						
						if [ "$ZENITY" = true ] ; then 

							# Avec barre de progression zenity
							( parse_nautilus ) | zenity --window-icon="$ICONE" --progress \
							--width=350 \
							--title="$NOMPRG" \
							--text="Traitement des photos" \
							--auto-close \
							--percentage=0 \

							# Gestion d'erreur
							if [ ! $? -eq 0 ]; then
								exit 0;
							fi

							if [ "$NOTIFY" = true ]; then
								notify-send -t 5 -i "$ICONE" "Traitement photo terminé" "$(verif_maj)"
							fi
							
						else 
							# sans barre de progression zenity
							parse_nautilus
						
						fi



					exit 0
					
				}


############# Configuration
	
	## Créer si inexistant:
		make_conf "$*"
	
	## Lire
		read_conf
		
	## Lecture des arguments
		read_args "$@"


if [ "$(printf %s "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | wc -l )" -gt 0 ]; then
	selection_nautilus
else
	selection_dossier
fi

exit 0

Hors ligne