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:
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:
- Connects to an imap server of your choice
- Selects the imap folder of your choice
- Looks at the messages (usually all of them)
- If there are messages that are not flagged
- It grabs the calendar part and adds it to a ical file
- 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…