Les contacts

notes sur la gestion des contacts

dernière édition le à

Carte des contacts

J'aimerai bien pouvoir combiner la cartographie et la gestion des contacts, tout en utilisant des outils et protocoles standard.
Le protocole CardDAV permet de stocker une adresse, mais aussi une coordonnée (latitude et longitude).
J'aimerai bien qu'un client de gestion de contact puisse faire le travail de convertir les adresses en coordonnées. Par exemple avec un bouton qui lance une recherche sur OSM et me propose ensuite une liste de résultat. Si je trouve une proposition qui me plaît, je la sélectionne et mon contact contient maintenant une géolocalisation.
Ensuite j'aimerai que mon client OSM local puisse accéder à mes contacts locaux. Il pourrait alors ajouter un calque contenant les points de mes contacts.

Projet relié : https://github.com/aurelienpierreeng/opencontactbook

Des logiciels comme Organic Map permettent d'importer des lieux au format GPX ou KMZ. Peut-être que la piste d'un convertisseur de fichiers VCARD en l'un de ces deux format serait intéressant.

Un des problème principal reste le fait qu'il n'existe aucun logiciel qui permet l'édition des coordonnées d'un contact.

Carnet de contacts (physique)

CardDav2Print

Dans la famille des trucs ...2print, j'aimerai ... le carnet de contact !

Genre le logiciel, tu lui files un dossier CardDAV et lui il te sort un PDF prêt à être imprimé !!

Allons voir ce qui existe !

Il existe une librairie en Go github que je pourrais peut être utiliser !

Elle est notamment utilisée par ce petit projet, dont je pourrais peut-être m'inspirer : https://github.com/alexwennerberg/vcard2csv

Un logiciel payant semble proposer d'exporter une liste de contacts en PDF : https://www.systoolsgroup.com/how-to/print-contacts-from-vcf-file/
En fait y'en a plusieurs, par exemple :

Premières expérimentations

Dans un permier temps, j'essaye déjà quelques outils CLI pour les contacts.

J'ai réussi à lancer vdirsync qui me permet de synchroniser mes contacts entre le serveur club1 et un dossier local (qui sera rempli de fichiers .vcf et c'est parfait !).

Voici la config :

$ cat ~/.config/vdirsyncer/config 
[general]
status_path = "~/.vdirsyncer/status/"

[pair contacts_club1]
a = "local"
b = "club1"
collections = ["main"]

[storage local]
type = "filesystem"
path = "~/.contacts/"
fileext = ".vcf"

[storage club1]
type = "carddav"

# We can simplify this URL here as well. In theory it shouldn't matter.
url = "https://webdav.club1.fr"
username = "vincent"
password = "XXXXXXXXXXXXXXX"

Seul défaut évident : j'ai du taper mon mot de passe en clair 😕

Ensuite j'ai testé un autre outil qui se combine bien avec : khard

Voici ma super config très basique. L'important étant de pointer vers le même dossier que le logiciel précédent.

$ cat ~/.config/kha
khal/  khard/ 
vincent@vincent-ThinkPad-X250:~/documents/web/carnet-video
$ cat ~/.config/khard/khard.conf 
# example configuration file for khard version > 0.14.0
# place it under ~/.config/khard/khard.conf
# This file is parsed by the configobj library.  The syntax is described at
# https://configobj.readthedocs.io/en/latest/configobj.html#the-config-file-format

[addressbooks]
main
path = ~/.contacts/main

[general]
debug = no
default_action = list
# These are either strings or comma seperated lists
# editor = micro, -i, NONE
merge_editor = vimdiff

[contact table]
# display names by first or last name: first_name / last_name / formatted_name
display = first_name
# group by address book: yes / no
group_by_addressbook = no
# reverse table ordering: yes / no
reverse = no
# append nicknames to name column: yes / no
show_nicknames = no
# show uid table column: yes / no
show_uids = yes
# show kind table column: yes / no
show_kinds = no
# sort by first or last name: first_name / last_name / formatted_name
sort = last_name
# localize dates: yes / no
localize_dates = yes
# set a comma separated list of preferred phone number types in descending priority
# or nothing for non-filtered alphabetical order
preferred_phone_number_type = pref, cell, home
# set a comma separated list of preferred email address types in descending priority
# or nothing for non-filtered alphabetical order
preferred_email_address_type = pref, work, home

[vcard]
# preferred vcard version: 3.0 / 4.0
preferred_version = 3.0
# Look into source vcf files to speed up search queries: yes / no
search_in_source_files = no
# skip unparsable vcard files: yes / no
skip_unparsable = no

Maintenant je peux lancer khard nicolas pour avoir la liste des Nicolas dans mes contacts. Pour 900 contacts, ça met environ une seconde.

Codage

J'ai commencé un programme en Go en me basant sur la librairie citée plus haut.

J'ai pu parser mon dossier précédement synchronisé et affichier des infos dans le terminal !

Ensuite j'ai réussi à appliqué une fonction de tri ! Pour l'instant j'ai fait un test en triant par les noms de famille :

// Sort contacts by FamilyName
sort.Slice(cards, func(i, j int) bool {
    return cards[i].Name().FamilyName < cards[j].Name().FamilyName
})

Pour l'affichage des images, je vais regardé comment à fait addbr.

vcard2print

Après quelques commit je suis arrivé à quelquechose de satisfaisant !

Pour les infos concernant le programme il faut aller voir le repo sur Codeberg :

https://codeberg.org/vincent-peugnet/vcard2print/

Ressources

autre