From 4ddad76a9fd9f9773ececfaa4665161733de7f30 Mon Sep 17 00:00:00 2001 From: raspbeguy Date: Sun, 18 Jun 2017 23:07:59 +0200 Subject: [PATCH] premier commit --- README.md | 17 ++++++++++++++++ contacts2sqlite.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 README.md create mode 100755 contacts2sqlite.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..8c10041 --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# contacts2sqlite + +## À propos + +Ce petit script, destiné à être invoqué par [vdirsyncer](https://vdirsyncer.pimutils.org/) est né dans l'optique de tenir à jour une base de données de contacts dans l'espoir de l'exploiter avec d'autres programmes (spoiler : proxy SMS). + +## Utilisation + +Dans votre configuration vdirsyncer, dans le paragraphe `[storage]` correspondant à la copie locale de vos contacts (nécessairement de type `filesystem`), ajoutez la ligne suivante : + +``` +post_hook = "/chemin/vers/contacts2sqlite.py" +``` + +## Attention + +Pour le moment, le script ne supprimera pas dans la base de donnée les contacts supprimés par vdirsyncer. diff --git a/contacts2sqlite.py b/contacts2sqlite.py new file mode 100755 index 0000000..9e873c6 --- /dev/null +++ b/contacts2sqlite.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 + +import os +import sys +import re +import sqlite3 +import vobject + +db_path = '~/contacts.db' +def_nat_pref = "33" + +db_path = os.path.expanduser(db_path) +directory = os.path.dirname(db_path) + +if not os.path.exists(directory): + os.makedirs(directory) + +conn = sqlite3.connect(db_path) +c = conn.cursor() + +c.execute("CREATE TABLE IF NOT EXISTS contacts (uid text primary key not null, name text not null, nick text, number text)") + +vcf_file = open(sys.argv[1]) +vcard = vobject.readOne(vcf_file) +vcf_file.close() + +uid = vcard.uid.value +name = vcard.fn.value +nick = '' +try: + nick = vcard.nickname.value +except AttributeError: + pass +num = [] +try: + for i in vcard.tel_list: + if i.type_param.lower() == "cell": + n = re.sub('[^0-9]','',i.value) + n = re.sub('^00','',n) + n = re.sub('^0',def_nat_pref,n) + num += [n] +except AttributeError: + pass + +row = (uid,name,nick,','.join(num)) +c.execute("INSERT OR REPLACE INTO contacts (uid, name, nick, number) VALUES (?,?,?,?)", row) + + +conn.commit() +conn.close()