emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Wes Hardaker <wjhns209@hardakers.net>
To: emacs-orgmode@gnu.org
Subject: org-contacts from bbdb: a starting solution
Date: Tue, 08 Mar 2011 12:51:38 -0800	[thread overview]
Message-ID: <sdy64pfi91.fsf@wjh.hardakers.net> (raw)

[-- Attachment #1: Type: text/plain, Size: 1153 bytes --]


I finally decided to take a wack at a bbdb to org-contacts converter.
I'm attaching the file below.  It should prompt for a file and
insert all your existing bbdb records into the file using the formats
and fields that I decided was appropriate ;-)

(require 'bbdb-to-org-contacts)
M-x bbdb-to-org-contacts 

Now...  I've been using bbdb for a very very long time.  That means that
I have a lot of records.  That means that this was a good chance to find
out how well org-contacts scales.  The sad news is that it doesn't.
Once I point org-contacts at my newly generated file containing 831
records it make org-contacts really really slow down.  I wouldn't care
about the normal record searching process for just looking something up,
but it makes loading a message in gnus unusable (5 second delay per message).

So...  I need to filter down to "current ones I need to keep" or we need
to optimize the contacts a bit to cache file points where a record for a
given email address is stored or something.

-- 
Wes Hardaker                                     
My Pictures:  http://capturedonearth.com/
My Thoughts:  http://pontifications.hardakers.net/

[-- Attachment #2: bbdb-to-org-contacts.el --]
[-- Type: text/plain, Size: 2304 bytes --]

(require 'bbdb)
(require 'bbdb-com)

(defvar bbdb-to-org-contacts-record-prefix "***")

(defvar bbdb-to-org-contacts-record-blanks "   ")

(defun bbdb-to-org-contacts (to-file)
  "outputs a org-contacts file"
  (interactive (list (read-file-name "Save in file: ")))
  (let* ((filename (expand-file-name to-file))
	 (records (bbdb-records)))
    (find-file filename)
    (while records
      (bbdb-record-to-org-record (car records))
      (setq records (cdr records)))
    ))

    
(defun bbdb-record-to-org-record (record)
  "converts a single record"
  (let* (
         (name    (bbdb-record-name record))
         (company (bbdb-record-company record))
         (net     (bbdb-record-net record))
         (aka     (bbdb-record-aka record))
         (phone   (bbdb-record-phones record))
         (address (bbdb-record-addresses record))
         (notes   (bbdb-record-notes record))
	 )
    
    (insert
     (format "%s %s\n" bbdb-to-org-contacts-record-prefix name))
    (insert
     (format "%s :PROPERTIES:\n" bbdb-to-org-contacts-record-blanks))

    (when aka
      (insert
       (format "%s :AKA:\t%s\n" bbdb-to-org-contacts-record-blanks
	       (mapconcat (function (lambda(str) str)) aka ", "))))

    (when net
      (insert
       (format "%s :EMAIL:\t%s\n" bbdb-to-org-contacts-record-blanks
	       (mapconcat (function (lambda(str) str)) net " "))))

    (when company
      (insert
       (format "%s :COMPANY:\t%s\n" bbdb-to-org-contacts-record-blanks company)))

    (when phone
      (insert
       (mapconcat
	(function (lambda(rec) 
		    (if (stringp (elt rec 1))
			(format "%s :PHONE_%s:\t%s"
				bbdb-to-org-contacts-record-blanks
				(upcase (elt rec 0))
				(elt rec 1))
		      (let ((len (length rec))
			    (count 2)
			    (output (format "%d" (elt rec 1))))
			(while (< count (1- len))
			  (setq output
				(concat output
					(format "-%d"
						(elt rec count))))
			  (setq count (1+ count)))
			(format "%s :PHONE_%s:\t%s"
				bbdb-to-org-contacts-record-blanks
				(upcase (elt rec 0)) output)))))
	phone "\n"))
      (insert "\n"))

    (when notes
      (insert
       (format "%s :NOTES:\t%s\n" bbdb-to-org-contacts-record-blanks notes)))

    (insert
     (format "%s :END:\n" bbdb-to-org-contacts-record-blanks))
    ))


(provide 'bbdb-to-org-contacts)

             reply	other threads:[~2011-03-08 20:51 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-08 20:51 Wes Hardaker [this message]
2011-03-09 11:46 ` org-contacts from bbdb: a starting solution Eric S Fraga
2011-03-09 15:18   ` Wes Hardaker
2011-03-10 13:07     ` Eric S Fraga

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=sdy64pfi91.fsf@wjh.hardakers.net \
    --to=wjhns209@hardakers.net \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).