mardi 30 novembre 2010

Scanner et envoyer un document par mail en un seul clic

Eh oui! voilà à quoi ça sert d'envoyer un mail en ligne de commande avec une pièce jointe :  La mamie peut avoir besoin d'aide pour comprendre et remplir ses documents administratifs. Et comme les personnes susceptibles de l'aider sont à distance, le plus simple est d'envoyer une copie par mail. Enfin, le plus simple pour nous Homo sapiens informaticus, mais pas pour la mamie Homo sapiens sapiens !

Alors j'ai eut l'idée de créer un script qui permet en un seul clic de scanner le document et de l'envoyer par mail. Il est toutefois nécessaire que la mamie allume le scanner et le branche à l'ordinateur...
Il lui suffit donc de cliquer  sur l'icône de l'imprimante scanner qui est sur son bureau :

... et ça lance les scripts suivants :

Code scan.sh :
#!/bin/sh
#On vérifie la présence du scanner
sane-find-scanner >/home/mamie/.scan/testscan

#On stocke dans la variable SCAN le résultat et on coupe
#les caractères qui nous intéressent
SCAN=$(grep "No USB" /home/mamie/.scan/testscan |cut -c5-18)
echo $SCAN
rm /home/mamie/.scan/testscan

#Boucle de vérification
#Si scan absent, on fait jouer un son et on quitte
#Si scan présent on scan et on envoie par e-mail

if [ "$SCAN" = "No USB scanner" ]
then
{
 # Lire fichier audio qui dit pas de scanner branché
 echo "pas de scanner branché"
 play /home/mamie/.scan/pas_de_scan.ogg
}
else
{
echo "super le scanner est branché"
#Maintenant on effectue scan
scanimage --progress --mode=Color >/home/mamie/.scan/document |
(for x in 2 4 6 8 10 12 14 16 18 20 30 40 50 60 70 80 90 95 ; do echo $x ; sleep 1; done)|
zenity --progress --auto-close --title "Scanner et envoie par mail" --text="Scanner en cours                                                      "
#on bascule sur le script de vérification et d'envoie par mail
/home/mamie/.scan/mail-scan.sh
}
fi

echo "fin du script 1"

exit 0;

et
Code mail-scan.sh:
#!/bin/sh


#on vérifie la taille du doc scanné pour savoir si ça a marché
DOC=$(du /home/mamie/.scan/document | cut -f1) 
echo  "$DOC"

if [ $DOC -gt 2500 ]; then
{
# on envoie par mail
echo "le scanner est pret et à fonctionné"
#on converti en jpeg, grace à la commande convert du paquet imagemagick
convert -quality 85 /home/mamie/.scan/document /home/mamie/.scan/document.jpg
#on envoie le mail
sleep 1
mutt -H /home/mamie/.scan/mail -a /home/mamie/.scan/document.jpg &
(for x in 5; do echo $x ; sleep 10; done)|
zenity --progress --pulsate --auto-close --title "Scanner et envoie par mail" --text="Envoie par e-mail à Catherine en cours                                                      "
#nettoyer les fichiers laissés par mutt et générés par le scan
rm /home/mamie/sent
rm /home/mamie/dead.letter
rm /home/mamie/.scan/document
play /home/mamie/.scan/success.ogg
}
elif [ $DOC -eq 0 ]; then
{
#scanner branché mais dysfonctionnement : message d'erreur et stop
echo "le scanner ne marche pas, il faut le débrancher et le rebrancher"
play /home/mamie/.scan/error_scan.ogg
rm /home/mamie/.scan/document
}
else
{
# on attends que le scanner soit pret on recommence
echo "Le scanner n est pas pret, on attends et on recommence"
rm /home/mamie/.scan/document
# on attends et on relance le sann
sleep 18
/home/mamie/.scan/scan.sh
}
fi
rm /home/mamie/.scan/document.jpg

exit 0;

Je ne vais pas détailler tout le script surtout que je l'ai bien commenté (#en bleu) pour décrire ce qu'il fait. Mais grosso-modo :
- On vérifie que le scanner est branché et sinon, on joue un fichier audio qui dit à mamie de brancher le scanner,
- On scan le document et on bascule sur le script 2,
- On vérifie que ça a marché. Si oui le document scanné fait une taille supérieure à 2500Ko, et alors on convertit en jpeg et on envoie par mail
- Si le scanner à un problème de pilote (il est branché mais ne réponds pas) le document fait 0Ko. On préviens avec un fichier audio que ça n'a pas marché
- Si le scanner est en train de s'initialiser (juste après être allumé) il ne scanne pas. Le document fait 4Ko (donc ni 0 ni >2500). Il suffit d'attendre la fin de l'initialisation et relancer le scan.

En plus des messages audio, on utilise zenity pour afficher des fenêtres pop-up de progression du processus. Si vous avez lu le code attentivement vous aurez noté que la progression du scanner est fictive (c'est juste une implémentation d'une variable 10, 20 , 30, etc...). Ok, c'est moche mais la durée de scan est toujours la même, alors pourquoi s'arracher les cheveux à essayer de récupérer le pourcentage d'avancement de scanimage plutôt que de simuler....

Et voilà, la magie de l'informatique à encore opérée : en un seul clique le papier de la mamie se transforme en document virtuel qui arrive dans la boîte mail de sa fille !
Ordinateur pour grand-parents, ordinateur pour papy, ordinateur pour personnes âgée, linux pour mamie, linux pour papy, linux pour personne âgée, linux pour grands-parents.

4 commentaires:

  1. Quel magicien ! :D
    Je suis bien curieuse de voir Mamie à l'oeuvre !!!

    RépondreSupprimer
  2. Et voilà la magie....... j'aime bien !!! mais comment ce document virtuel peut-il arriver dans la boîte mail de sa fille, faudrait peut-être l'enregistrer quelque part et ?????????

    RépondreSupprimer
    Réponses
    1. Ce commentaire a été supprimé par l'auteur.

      Supprimer
    2. L'envoie du mail est avec la commande mutt : mutt -H /home/mamie/.scan/mail -a /home/mamie/.scan/document.jpg

      En fait l'adresse est enregistrée dans le petit fichier "mail" (début de la commande) /home/mamie/.scan/mail et c'est dans ce fichier qu'est enregistrée l'adresse mail de sa fille. C'est le fichier du mail par défaut avec le texte du mail et l'adresse à qui l'envoyer.

      Plus d'info sur la commande mutt ici : http://doc.ubuntu-fr.org/mutt

      Supprimer