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
- gestionnaires de contact en GUI
- Vcard Studio https://app.zdechov.net/vcard-studio uniquement compatible avec le mode mono-fichier 😥.
- gestionnaires de carnet d'adresse en CLI
- Khard https://khard.readthedocs.io Vcard client CLI (avec un paquet Debian)
- Mates https://github.com/pimutils/mates.rs Vcard client CLI
- PPL https://github.com/henrycatalinismith/ppl un autre en Ruby
- Rolo https://github.com/libvc/rolo gestionnaire en TUI, mais uniquement compatible avec le mode mono-fichier 😥.
- Qcard https://git.sr.ht/~psic4t/qcard CLient de synchro pour server (sans cache local) en Go. (aucune dépendance)
- SaDav https://codeberg.org/trill/sadav Client Caldav/CardDAV CLI
- Addrb https://github.com/mrusme/addrb Client pour serveur en lecture seul en Go.
- synchro
- VdirSyncer https://vdirsyncer.pimutils.org Outil de synchronisation de Vdir, entre un serveur cardDAV et un dossier local (avec un paquet Debian)
- librairies
- Go Vcard https://github.com/emersion/go-vcard librairie Go pour parser des Vcards.
- article
autre
- Rolodex - https://fr.wikipedia.org/wiki/Rolodex
- Open Contact https://www.fonlow.com/opencontacts/ Logiciel de gestion GUI qui semble démoniaque !
- https://vcard.link/ Partage de Vcard via le Web