The Exchange Project - Syncing Exchange to iCal and back


As noted [elsewhere][], I decided to go on with the Exchange2iCal project I started almost one year ago.I’m actually getting along nicely, also due to the fact that Jeffrey Harris released the wonderful [VObject][] package some days ago. (Thanks to [Jon][] for the tip!)

iCalendar Sync

So far, the following bits and pieces are working:

  • I can get the whole Exchange Calendar as an ics file, including recurrence, alarms and meeting status.
  • I can parse and compare two iCalendar files and get the following information:
  • New Local/Remote Events
  • Changed Local/Remote Events
  • Deleted Local/Remote Events

The first part can be considered “stable”, that is, if you’re OK w/ read-only access to you calendar, you could basically use that part. You can download these here: [e2i][].

Warning> These scripts are provided strictly as is. It’s alpha status at best, hacked together to work on my environment and not tested elsewhere than my Mac. There isn’t a README available and I assume that you know how to get the different tidbits needed to make it running, in particular:>#

  • Python 2.3>
  • PyObjC (If you want to profit from Keychain-based authentication to Exchange)> * Basic knowledge of Python» (If you can’t, then maybe you’re not the exact target audience for these scripts and better wait for the moment where I have something a little more user-friendly *or* where Apple themselves release an iSync to Exchange. I know there are quite a bunch o’ people in the wild that’d like to see this working, but sorry, it’s just not there yet.).» I further assume that you know how to read a program and change certain parameters. > There is some documentation in the code, but remember:> This is not for the faint-hearted!> And now go and run :)

The second part (parsing & comparing) is still very buggy and unstable. I get pretty decent results but the parsing & comparing is somewhat unpredictable.

Now, I am heading for the following:

  • Increase the stability of the comparison1
  • Implement a first one-way updater
  • Wrap the thing up so fetching, comparing and updating will become one monolithic sync process
  • Write an iSync plugin

(This last point should be the easiest, as PyObjC can now be used to program NSBundles in Python, as seen [here][]. ;) (Hat tip: [John Gruber][])

Some other tidbits are going along with this as well:

  • Increase the stability and usefulness of the XSLT that transforms the Exchange data to iCalendar
  • Bring meeting attendee info into the iCS if possible
  • Recur to less file-based transactions (i.e., less data-dumps and more advanced uses of stuff like LibXML2’s Python bindings etc.)
  • Lure our Sysadmins to install Exchange 2003 ASAP.
  • Become better in Python programming :)
  • Set-up some project space with a constant URL so people can find this – if they want :)

RationaleYou might ask yourself the question what the rationale of this project is? I’ll admit, I’m only doing this to get /.ed once in my life. :) But before you go and call the dot to slash me, bear in mind that this project is not yet finished – some more time is needed to get something that’s worth a /. :)#

(Actually, getting Exchange on my Mac desktop would be great, too … )

  1. That is, better understand the [VObject][] architecture :)[elsewhere]: /2004/11/20/more-on-exchange-os-x/ “More on Exchange & OS X”[VObject]: “VObject Project Home” [Jon]: “Jon Udell on CalDAV”[here]: “PyObjC, py2app, and bundle”[John Gruber]: “John Gruber”[e2i]: “Exchange2iCal” ↩︎


No comments. Be the first to add one!
Add a comment.
We'll never share your email with anyone else. We use the Gravatar system to pull in pictures based on an anonymous hash.
Once you submit your comment, it will be moderated and then show up here shortly after.