#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