]> gitweb.pimeys.fr Git - scripts-20-100.git/commitdiff
[import_caff_signs] Gestion nettement plus propre des flags IMAP
authorVincent Le Gallic <legallic@crans.org>
Mon, 18 Aug 2014 15:52:56 +0000 (17:52 +0200)
committerVincent Le Gallic <legallic@crans.org>
Mon, 18 Aug 2014 15:56:11 +0000 (17:56 +0200)
Le flag S veut dire lu.

On récupère correctement les mails qui n'ont pas de flag S,
et pas seulement les ":2,a" (en plus, "a" j'ai pas réussi à trouver
ce que c'était comme flag).

Du coup le renommage "mark as read" est nettement plus sioux,
parce qu'on est censés respecter l'ordre ASCII pour les flags.
Alors si le mail est nommé en respectant cette convention, le script
mettra bien le S là où il faut. Par contre, si c'est le dawa dans
l'ordre des flags, il mettra le S quelque part au milieu
(sans changer l'ordre des autres).
J'ai vérifié, icedove ne se formalise pas de l'ordre des flags
(si on touche au mail avec lui, icedove remet les flags dans
le bon ordre)

import_caff_sigs.sh

index 20286683e7819fe85d512843b95b0f5bb298e893..61ea83f8a85155e0a344867904b7c47571622985 100755 (executable)
@@ -17,7 +17,11 @@ agentpid=$(echo $GPG_AGENT_INFO | cut -d: -f 2)
 where=`mktemp -d`
 cadre "Storing mails copied in ${where}"
 
-scp zamok:~/Mail/.Signatures/cur/*:2,a ${where}
+# On récupère la liste des fichiers qui n'ont pas de S (\Seen) dans leurs flags
+# (on vire le \x0 qui est à la fin, et on prie pour qu'il n'y ait jamais d'espaces dans les noms de mails)
+MAILS=$(ssh zamok find "~/Mail/.Signatures/cur/" -type f -regex "'[^:]+:2,[^S]*'" -print0 | sed "s/\x0/ /g;s/ $//")
+# On parsème de virgules et de backslash là où il faut et on les rappatrie
+echo $MAILS | sed 's/,/\\\\,/g;s/ /,/g' | xargs -I % scp zamok:{%} ${where}
 
 # On traite les mails un par un
 cadre "Decrypting and importing signatures"
@@ -30,7 +34,10 @@ done
 cadre "Cleaning up"
 echo -n "Mark distant e-mails as read ? [Y/n]"
 read -r ans
-[[ "${ans}" = "n" ]] || [[ "${ans}" = "N" ]] || ssh zamok rename 's/2,a$/2,Sa/' Mail/.Signatures/cur/*:2,a
+# On ajoute le flag S (\Seen) aux mails concernés là où il faut dans l'ordre alphabétique
+# en ne touchant pas au reste de leur nom
+# Attention au "''" et aux \$ parce que ssh needs moar escapingz
+[[ "${ans}" = "n" ]] || [[ "${ans}" = "N" ]] || ssh zamok rename -v "'s/^([^:]+):2,([A-R]*)([^S]*)$/\$1:2,\$2S\$3/'" $MAILS
 
 # On fait le ménage
 echo -n "Remove local tempfolder ? [Y/n]"