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 23/05/2010, à 23:29

Ferod

Génération fichier xml pour les fonds d'écran

Bonjour

Je me suis fait un petit script pour générer un fichier xml pour s'en servir comme fond d'écran. C'est fait sans prétention juste pour que ce soit utile et fonctionnel.
Pour l'utiliser c'est assez simple, vous mettez le script et les images dans le dossier de votre choix, avec un terminal rendez vous dans le répertoire en question, puis tapez la commande ./nomDuScript et hop vous obtenez un fichier wallpaper.xml près à l'utilisation.
Pour ceux qui sont allergique à la ligne de commande, rendre le script exécutable et double cliquer dessus puis choisir 'Lancer dans un terminal'.

Il doit pas manquer grand chose pour que ça puisse être utilisé avec nautilus-action...

#!/bin/bash

touch Wallpaper.xml
echo "<background>" > Wallpaper.xml
echo "  <starttime>" >> Wallpaper.xml
echo "    <year>2009</year>" >> Wallpaper.xml
echo "    <month>08</month>" >> Wallpaper.xml
echo "    <day>04</day>" >> Wallpaper.xml
echo "    <hour>00</hour>" >> Wallpaper.xml
echo "    <minute>00</minute>" >> Wallpaper.xml
echo "    <second>00</second>" >> Wallpaper.xml
echo "  </starttime>" >> Wallpaper.xml
echo "<!-- This animation will start at midnight. -->" >> Wallpaper.xml
repertoire=$PWD
rank=1
for i in $(ls *.jpg) ; do
	ligneFile="<file>"$repertoire"/"$i"</file>"
	ligneFrom="<from>"$repertoire"/"$i"</from>"
	ligneTo="<to>"$repertoire"/"$i"</to>"
	if [ $rank -eq 1 ]; then
		premierFichier=$i
		echo "  <static>" >> Wallpaper.xml
		echo "    <duration>1795.0</duration>" >> Wallpaper.xml
		echo "    "$ligneFile >> Wallpaper.xml
		echo "  </static>" >> Wallpaper.xml
		echo "  <transition>" >> Wallpaper.xml
		echo "    <duration>5.0</duration>" >> Wallpaper.xml
		echo "    "$ligneFrom >> Wallpaper.xml
		let $[ rank += 1 ]
	else
		echo "    "$ligneTo >> Wallpaper.xml
		echo "  </transition>" >> Wallpaper.xml
		echo "  <static>" >> Wallpaper.xml
		echo "    <duration>1795.0</duration>" >> Wallpaper.xml
		echo "    "$ligneFile >> Wallpaper.xml
		echo "  </static>" >> Wallpaper.xml
		echo "  <transition>" >> Wallpaper.xml
		echo "    <duration>5.0</duration>" >> Wallpaper.xml
		echo "    "$ligneFrom >> Wallpaper.xml
		let $[ rank += 1 ]
	fi
done
ligneTo="<to>"$repertoire"/"$premierFichier"</to>"
echo "    "$ligneTo >> Wallpaper.xml
echo "  </transition>" >> Wallpaper.xml
echo "</background>" >> Wallpaper.xml

Dernière modification par Ferod (Le 23/05/2010, à 23:35)


"When I was in the military, they gave me a medal for killing
two men, and a descharge for loving one !" Leonard Matlovich

Hors ligne

#2 Le 15/11/2010, à 13:41

artemis-artetphotos

Re : Génération fichier xml pour les fonds d'écran

Vraiment super ce petit script. Ca fonctionne très bien chez moi.
Merci beaucoup!

Hors ligne

#3 Le 09/12/2010, à 17:43

Lad

Re : Génération fichier xml pour les fonds d'écran

Bonjour

Sympa ton script. Est ce que tu as des indications sur comment ça marche et sur le sens de duration ?

Merci

Hors ligne

#4 Le 09/12/2010, à 19:35

Ferod

Re : Génération fichier xml pour les fonds d'écran

Oui vaguement (j'ai rien inventé hein).
Tu as deux phases :
- Phase statique : il y a 2 paramètres :
                - image à afficher
                - durée : la durée en seconde de l'affichage de l'image.
- Phase transition ; ce coup ci il y a 3 paramètres
                - image de départ
                - image d'arrivée
                - durée : la durée de la transition entre les deux images en secondes
Ensuite il faut lui donner une date au début du fichier pour qu'il puisse calculer à la date d'aujourd'hui quel image il faut afficher. Dans le script c'est le 4/8/2009. Et c'est bon ! smile

Dernière modification par Ferod (Le 09/12/2010, à 19:35)


"When I was in the military, they gave me a medal for killing
two men, and a descharge for loving one !" Leonard Matlovich

Hors ligne

#5 Le 10/12/2010, à 22:43

Vaderf

Re : Génération fichier xml pour les fonds d'écran

Bonjour à tous,

Merci Ferod pour ce bout de code. Pour ma part, j'avais fait un script un tout petit peu différent (qui permettait de choisir les images une à une). J'ai trouvé ton idée pas mal. Du coup, j'ai fusionné nos deux scripts. Et cerise sur le gâteau, il s'agit d'un script nautilus.

Pour ceux qui ne connaissent pas les scripts nautilus : doc

Voici le code :

#!/bin/bash
#auteurs : Vaderf <vaderf at free point fr> & Ferod
#version : 1.0
#date de création : 2010-09-14
#date de modification : 2010-12-10
#licence : GPL v2


#--------------
# Commentaires
#--------------

# Ce script n'est pas garanti sans bugs (même après de très nombreux tests) et est à utiliser à vos risques et périls.
# Il doit être exécuté sur un dossier.


#-----------
# Variables
#-----------
# c : variable arbitraire
# cx : choix
# d : dossier de stockage du fichier .xml
# r : réponse
# nb : nombre d'éléments
# nt : nom du chemin retraité
# ti : temps d'affichage de l'image
# tt : temps de transition



#-------------------------------------
# Entrées des paramètres du diaporama
#-------------------------------------

cx=$(zenity --list --title="Créateur de fonds d'écran animés" --text="Voulez-vous traiter le dossier en une seule fois ou choisir chaque image ?" --column="Votre choix :" Oui Non); if [ $? -eq 1 ];then exit 1; fi;

n=$(zenity --entry --title="Créateur de fonds d'écran animés" --text="Quel nom donné au fichier de configuration (ex.: Paysages d'été) ?"); if [ $? -eq 1 ];then exit 1; fi;

zenity --info --title="Créateur de fonds d'écran animés" --text="Vous allez maintenant sélectionner le dossier dans lequel le fichier sera sauvegardé."

d=$(zenity --file-selection --title="Créateur de fonds d'écran animés" --filename="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" --directory); if [ $? -eq 1 ];then exit 1; fi;

tt=$(zenity --entry --title="Créateur de fonds d'écran animés" --text="Combien de temps doit durer la transition entre deux images ? (temps en secondes)" --entry-text="5"); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;

ti=$(zenity --entry --title="Créateur de fonds d'écran animés" --text="Combien de temps l'image restera-t-elle a l'écran ? (temps en secondes)" --entry-text="1800"); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;



#---------------------------------------------------------------
# Traitement de l'ensemble du dossier (partie créée par Ferod)
#---------------------------------------------------------------

case $cx in
Oui)


nt=$(echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | sed 's/ /\ /g') #Ajoute un caractère d'échappement aux espaces

l=$(ls "$nt"/*.jp*)

IFS=$'\n' #Change le séparateur standard (espace) pour RETURN (utile pour $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS)

nb=$(echo "$l" | sed -n '$=')

touch "$d/$n.xml"
echo "<background>" > "$d/$n.xml"
echo "  <starttime>" >> "$d/$n.xml"
echo "    <year>2009</year>" >> "$d/$n.xml"
echo "    <month>08</month>" >> "$d/$n.xml"
echo "    <day>04</day>" >> "$d/$n.xml"
echo "    <hour>00</hour>" >> "$d/$n.xml"
echo "    <minute>00</minute>" >> "$d/$n.xml"
echo "    <second>00</second>" >> "$d/$n.xml"
echo "  </starttime>" >> "$d/$n.xml"
echo "<!-- This animation will start at midnight. -->" >> "$d/$n.xml"
rank=1
for i in $l ; do
    ligneFile="<file>""$i""</file>"
    ligneFrom="<from>""$i""</from>"
    ligneTo="<to>""$i""</to>"
    if [[ $rank -eq 1 ]]; then
        premierFichier=$i
        echo "  <static>" >> "$d/$n.xml"
        echo "    <duration>$ti</duration>" >> "$d/$n.xml"
        echo "    "$ligneFile >> "$d/$n.xml"
        echo "  </static>" >> "$d/$n.xml"
        echo "  <transition>" >> "$d/$n.xml"
        echo "    <duration>$tt</duration>" >> "$d/$n.xml"
        echo "    "$ligneFrom >> "$d/$n.xml"
    ((cp ++))                 #Compteur nécessaire pour zenity
    echo $((rank*100/nb))            #Incrémentation du compteur
        let $[ rank=$rank+1 ]
    else
        echo "    "$ligneTo >> "$d/$n.xml"
        echo "  </transition>" >> "$d/$n.xml"
        echo "  <static>" >> "$d/$n.xml"
        echo "    <duration>1795.0</duration>" >> "$d/$n.xml"
        echo "    "$ligneFile >> "$d/$n.xml"
        echo "  </static>" >> "$d/$n.xml"
        echo "  <transition>" >> "$d/$n.xml"
        echo "    <duration>5.0</duration>" >> "$d/$n.xml"
        echo "    "$ligneFrom >> "$d/$n.xml"
    ((cp ++))                 #Compteur nécessaire pour zenity
    echo $((rank*100/nb))            #Incrémentation du compteur
        let $[ rank=$rank+1 ]
    fi
done | zenity --progress --title="Créateur de fonds d'écran animés" --text="La construction est en cours" --auto-close; if [ $? -eq 1 ];then exit; fi;
ligneTo="<to>""$premierFichier""</to>"
echo "    "$ligneTo >> "$d/$n.xml"
echo "  </transition>" >> "$d/$n.xml"
echo "</background>" >> "$d/$n.xml"


;;
esac



#------------------------------
# Traitement images par images
#------------------------------

case $cx in
Non)

# Entête du fichier de configuration

cat > "$d/$n.xml" << EOF
<background>
  <starttime>
    <year>2009</year>
    <month>08</month>
    <day>04</day>
    <hour>00</hour>
    <minute>00</minute>
    <second>00</second>
  </starttime>
<!-- This animation will start at midnight. -->
EOF


# Ajout du premier chemin dans le fichier de configuration

f1=$(zenity --file-selection --title="Créateur de fonds d'écran animés" --separator=" "); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;
cat >> "$d/$n.xml" << EOF
  <static>
    <duration>$ti</duration>
    <file>$f1</file>
  </static>
  <transition>
    <duration>$tt</duration>
    <from>$f1</from>
EOF


# Ajout des chemins suivant dans le fichier

c=0
while [[ $c -eq 0 ]]
do 
    fx=$(zenity --file-selection --title="Créateur de fonds d'écran animés" --filename="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" --separator=" "); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;
    cat >> "$d/$n.xml" << EOF
<to>$fx</to>
  </transition>
  <static>
    <duration>$ti</duration>
    <file>$fx</file>
  </static>
  <transition>
    <duration>$tt</duration>
    <from>$fx</from>
EOF
    r=$(zenity --list --title="Créateur de fonds d'écran animés" --text="Voulez-vous ajouter un autre fichier ?" --column="Votre choix :" Oui Non); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;
case $r in
    Oui)
    ;;
    Non)
        c=1
    ;;
esac

done


# Finalisation du fichier fichier

cat >> "$d/$n.xml" << EOF
    <to>$f1</to>
  </transition>
</background>
EOF


;;
esac



#---------------------------------------------------------
# Ajout du fichier diaporama à la liste des fonds d'écran
#---------------------------------------------------------

r=$(zenity --list --title="Créateur de fonds d'écran animés" --text="Voulez-vous ajouter votre diaporama à la liste des fonds d'écran ? (conseillé) (ne fonctionne qu'avec Gnome)" --column="Votre choix :"  Oui Non); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;

case $r in
    Oui)
        gnome-appearance-properties "$d/$n".xml
    ;;
    Non)
    ;;
esac


exit 0 

Pour qu'il soit intégré au menu déroulant de nautilus, voici la marche à suivre :

  1. Ouvrir le dossier ~/.gnome2/nautilus-scripts.

  2. Ajouter un fichier vierge qu'on peut nommer Créateur de fonds d'écran animés par exemple

  3. Y coller le code ci-dessus

  4. Rendre ce script exécutable comme suit :

    chmod u+x ~/.gnome2/nautilus-scripts/Créateur de fonds d'écran animés
  5. En cliquant droit sur le dossier qui contient les images, choisir le menu Scripts -> Créateur de fonds d'écran animés



Je suis ouvert à toute critique ou suggestion !

En espérant que ma modeste contribution aide quelques personnes !

A+

Dernière modification par Vaderf (Le 12/12/2010, à 23:45)


Asus UL80Vt
Ubuntu 11.10

Hors ligne

#6 Le 12/12/2010, à 13:03

Ferod

Re : Génération fichier xml pour les fonds d'écran

Merci à toi aussi pour la grosse amélioration ! smile


"When I was in the military, they gave me a medal for killing
two men, and a descharge for loving one !" Leonard Matlovich

Hors ligne