Brad Dominy


Our VOIP system works with Cisco IP phones to illuminate a Message Waiting Indicator (MWI) light on the phones whenever a user has a new voicemail. It also allows for the delivery of those voicemails as wav attachments in emails. The only problem was that the system did not know when voicemails had been read and the Message Waiting Indicator (MWI) remained on all the time. This proved to be a distraction for people as they never could trust whether the light meant they really had new voicemail or not.

LightSwitch is a mail bundle which listens for the changing of the message read flag on delivered voicemails and then toggles the MWI light on or off to match. It is deceptively simple. First, mail bundles are not officially allowed by Apple and using them is an at your own risk proposition. However, gaining access to the guts of the Mail app was necessary in order to tie into the system. Second, our VOIP system let you toggle the MWI but only with a telnet session. Finally, the requirements were that it work in the background with zero setup, so it was a pretty tall order.

LightSwitch uses the account information for the voicemail IMAP account to lookup from LDAP a user's phone extension. It uses a technique called "swizzling" to replace a method with one of it's own in the objective-c runtime. This lets you listen in to the signals Mail normally sends internally, including the one when a message read flag is updated. Whenever a voicemail message is read, LightSwitch checks to see how many unread messages there are and if there are none, it starts a telnet session to our VOIP system to turn the MWI light off for that user's extension. It can also turn the light on if you mark a voicemail as unread. It all happens within a couple of seconds so user's are no longer worried about the system getting out of sync.

It installs by just being dropped into a user's Library/Mail/Bundles folder and by updating Mail's preferences to allow for bundles. Lately, Apple has been adding a couple of extra layers of protection to make sure that mail bundles are compatible, so while they are still not officially sanctioned, it looks like they are going to tolerate them for the foreseeable future.

About me

Brad Dominy


By Language

By Frameworks