commit 58e65103e4a7a15c59e77e8824a9ffb69396bd65
parent 1d740b3a0ebe5d40e45a9feb7502091827640bae
Author: Jaromil <jaromil@dyne.org>
Date: Wed, 11 Jul 2012 19:20:43 +0200
import addressbook from VCards
Diffstat:
2 files changed, 66 insertions(+), 2 deletions(-)
diff --git a/src/jaro b/src/jaro
@@ -346,6 +346,7 @@ main()
subcommands_opts[learn]=""
subcommands_opts[forget]=""
subcommands_opts[list]=""
+ subcommands_opts[import]=""
subcommands_opts[edit]=""
subcommands_opts[open]=""
@@ -463,6 +464,7 @@ main()
learn) CLEANEXIT=0; learn ${PARAM} ;;
forget) CLEANEXIT=0; forget ${PARAM} ;;
list) CLEANEXIT=0; list_addresses ${PARAM} ;;
+ import) import_vcard ${PARAM} ;;
edit) CLEANEXIT=0; editor ${PARAM} ;;
open) CLEANEXIT=0; open_file ${PARAM} ;;
diff --git a/src/zlibs/addressbook b/src/zlibs/addressbook
@@ -57,7 +57,9 @@ INSERT INTO $list (email, name)
VALUES ("${1}", "${2}");
EOF
{ test $? != 0 } && {
- func "address already present in $list" }
+ func "address already present in $list"
+ return 1
+ }
return $0
}
remove_address() {
@@ -94,7 +96,7 @@ address() {
matches="${matches}\n`search_name ${PARAM[1]}`"
# mutt query requires something like this
- print "jaro: `print $matches | wc -l` matches"
+ print "jaro: $((`print $matches | wc -l` -1)) matches"
print "$matches" | awk '
{ printf "%s\t", $1
for(i=2;i<=NF;i++) {
@@ -164,4 +166,64 @@ EOF
act -n ""; ls -lh $WORKDIR/addressbook.bz2
}
+
+# import addresbook email from VCard
+import_vcard() {
+ { test ! -r ${WORKDIR}/addressbook } && { create_addressbook }
+ chmod 600 $WORKDIR/addressbook # make sure is private
+
+
+ { test -r ${PARAM[1]} } || {
+ error "File not found: import ${PARAM[1]}"
+ return 1
+ }
+
+ vcard=${PARAM[1]}
+ head -n1 $vcard | grep '^BEGIN:VCARD' > /dev/null
+
+ { test $? = 0 } || {
+ error "File to import is not a VCard: $vcard"
+ return 1
+ }
+
+ notice "Import in addressbook VCard ${vcard}"
+ tmp=$TMPDIR/import.$datestamp.$RANDOM
+
+ cat ${vcard} | awk '
+BEGIN { newcard=0; c=0; name=""; email=""; }
+/^BEGIN:VCARD/ { newcard=1 }
+/^FN:/ { if(newcard = 1) name=$0 }
+/^EMAIL/ { if(newcard = 1) email=$0 }
+/^END:VCARD/ {
+ if(newcard = 1) {
+ newcard=0
+ if(email != "") {
+ c+=1
+ print name
+ print email
+ print "# " c
+ }
+ email=""
+ next
+ }
+}
+' | cut -d: -f2 > $tmp
+
+ addresses=`cat $tmp`
+ newa=1; _name=""; _email=""
+ for a in ${(f)addresses}; do
+ { test "${a[1]}" = "#" } && {
+ newa=1;
+ insert_address "${_email}" "${_name}"
+ { test $? = 0 } && { act "${a} ${_name} <${_email}>" }
+
+ continue }
+ { test $newa -eq 1 } && {
+ # (V) makes special chars visible, we need to remove them..
+ _name=`echo ${(V)a} | cut -d^ -f1`; newa=0; continue }
+ { test $newa -eq 0 } && { _email=`echo ${(V)a} | cut -d^ -f1` }
+ done
+ rm -f $tmp
+}
+
###################