Exg2Cal first release (v0.0.1 alpha)

I have just recently created my first useful ruby app (it is a class really). We run Exchange at work, and I felt some concern that those who use FOSS apps to get mail and calendar info would be out of luck if they wanted to do calendaring (not a word) within our organization. Currently that is only me. So I installed Ruby (v1.8) and Mondrian and started looking at Net::IMAP to pull messages from calendar folders. Exchange uses the vCal/iCal format for events and they are either attached to a message, or the content of a message. It works. It is not refined, and I know it could use some error handling, threads, and maybe just a good look-over, but here it is:

exg2cal.rb

It can be called like so:

require 'exg2cal'
jack=Exg2Cal.new("imap.server.com","folder","user","pass")
#this is a range
jack.extract(1..-1)
#this is the name of the ical file. Right now '.ics' is auto-appended
jack.write_cal("filename")
jack.finish

What it does:

  1. Connects to an imap server of your choice
  2. Selects the imap folder of your choice
  3. Looks at the messages (usually all of them)
  4. If there are messages that are not flagged
  5. It grabs the calendar part and adds it to a ical file
  6. And then flags the message

Possible problems:

  • It does not check to make sure the content is a calendar! This means that you have to make sure that the folder you aim it at is a calendar folder. I will be looking at this part next.
  • It can be slow. I will also make it threaded so that it can make some connections concurrently.
  • It is my VERY FIRST program written in any language, and therefore may just be a mess. I am not even sure it qualifies as a program.
  • No documentation. No too much to document yet, I guess, but it is still a problem, especially if I ever turn it into a huge bloated tangle someday.
  • The file that is created/used is in the same folder as the app. I would like to be able to put it up on a WebDav server so that other calendar clients can subscribe, etc. I think that before that I will make it so that you can choose where to put the file.
  • No interface, not even cli, yet. I will look at making one, but I do not want to create too many dependencies. Maybe I will make a rails interface…

I use it to update my Sunbird calendar for our department. I use Thunderbird for email, so I miss out on the outlook features, but I can now access both the email and calendar info on any platform. Admittedly this is a little silly because we do have OWA running…