Blog de dada

DevOps, bidouilleur et routard plein de logiciels libres

CardDab

Android, Nextcloud, son application Contacts, DAVdroid et l'erreur 15

Rédigé par dada / 07 septembre 2016 / 2 commentaires


Il y a des trucs qui m'ont gonflé ces derniers jours et cette erreur en fait partie :
java.lang.IllegalStateException: [Error 15] PREF parameter value is malformed 
Pas très claire, pas super bavarde, y'a pas pire comme type d'erreur, surtout quand on aime bien gérer son propre serveur pour pouvoir profiter de la synchronisation des contacts de son téléphone avec son instance Nextcloud. Bon, je triche un peu, c'est une erreur Java, c'est plus verbeux que ça, mais j'allais pas déformer ce billet avec son blabla.
J'ai commencé par faire les trucs de base : sauvegarder mes contacts sur le téléphone, vider le carnet d'adresses, vider l'application Contacts de son contenu et lancer une synchronisation après avoir fait ce grand ménage. Rien à faire, ça pétait toujours. #Tristitude

En traînant sur l'internet mondial, j'apprends qu'il y a plusieurs versions du protocole VCard, le format ouvert qui permet l’échange des cartes visites, ou dit plus clairement, l’échange de nos contacts du téléphone. C'est lui que CardDav manipule. On ne va pas rentrer les détails mais, comme tout machin avec une RFC, une ligne de conduite claire, faut filer droit. A priori, les applications qui se cognent la manipulation des VCard savent ce qu'elles font, ou pas.
Je ne sais pas vraiment depuis quand la valeur PREF traîne dans les informations de mes contacts, mais ce merdeux est presque partout et il est mal utilisé. Exemple :
BEGIN:VCARD
VERSION:2.1
N:Johansson;Scarlett;;;
FN:Scarlett Johansson
TEL;CELL;PREF:+42612345678
END:VCARD
Remarquez bien ce maudit PREF qui se balade entre CELL et le numéro de téléphone : il n'a rien à faire ! La ligne TEL doit contenir les informations relatives au 06 du contact, ce que le squatteur ne comprend pas.
Bref, pour corriger la synchro avec Contacts de Nextcloud via DAVdroid, il suffit de le faire sauter. C'est comme ça que j'ai fait, ce n'est sans doute pas la façon la plus propre de faire, mais ça m'a défrustré.

La solution la plus simple, si vous êtes sous GNU/Linux et que vous savez un tout petit peu vous servir d'un terminal, c'est de :
  • Extraire son carnet d'adresse au format VCF
  • Ouvrir un terminal
  • Exécuter la commande suivante :
 sed -i "s/TEL;CELL;PREF:/TEL;VOICE:/g" contacts.vcf 
Avec cette simple manipulation, vous venez de faire sauter la totalité des occurrences de PREF; de votre carnet d'adresse en la remplaçant par VOICE;, qui ne pose pas de souci. Notez qu'il doit existe d'autre formats corrects pour la ligne TEL, vous pouvez fouiller si l'envie vous prend.
Enfin, vous pouvez tranquillement réimporter ce fichier édité dans le carnet d'adresse de votre téléphone et dans Nextcloud, ça marchera tout seul, sans cette fichue error 15.