From: Vincent Le Gallic Date: Mon, 18 Aug 2014 15:52:56 +0000 (+0200) Subject: [import_caff_signs] Gestion nettement plus propre des flags IMAP X-Git-Url: http://gitweb.pimeys.fr/?a=commitdiff_plain;h=67078551607c21b382c4aeecec9680cb74434f29;p=scripts-20-100.git [import_caff_signs] Gestion nettement plus propre des flags IMAP 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) --- diff --git a/import_caff_sigs.sh b/import_caff_sigs.sh index 2028668..61ea83f 100755 --- a/import_caff_sigs.sh +++ b/import_caff_sigs.sh @@ -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]"