Work Around Address Book's Rollover Suite Bug to Calculate Age
Posted: 2016-May-16 Filed under: Computers | Tags: 10.6.8, Address Book, OSX, Snow Leopard Leave a comment »This is a start to working around a known Rollover Suite bug in Apple "Snow Leopard" OSX 10.6.8's Address Book application, version 5.0.3 (as noted on Apple's support group). The application contains a really cool feature where one can write AppleScripts that appear as pop-up menu choices. A built-in example is the way you can click on an address field and "Copy Mailing Label" which does an okay job formatting a mailing label for that person's address.
This is accomplished by writing an Applescript that has the following form:
using terms from application "Address Book"
on action property
return "" -- a string of "maiden name", "phone", "email", "url", "birth date", "custom date", "related name", "aim", "icq", "jabber", "msn", "yahoo", or "address"
end action property
on should enable action for thePerson with theEntry
return true -- if the menu choice should appear
end should enable action
on action title for thePerson with theEntry
return "" -- the text of the menu choice to display
end action title
on perform action for thePerson with theEntry
-- Perform the action if the user clicks the menu choice.
end perform action
end using terms from
So if you plug in something like this:
using terms from application "Address Book"
on action property
return "phone"
end action property
on should enable action for thePerson with theEntry
return true
end should enable action
on action title for thePerson with theEntry
return "Dial number"
end action title
on perform action for thePerson with theEntry
-- Dial the number.
end perform action
end using terms from
And you save it as a compiled script in ~/Library/Address\ Book\ Plug-Ins/ (that is, your user account's Library/Address\ Book\ Plug-Ins/), then the next time you restart Address Book, it'll activate. If you click on the label for a phone number, you'll see a new menu choice like this:
As I had mentioned, there's a known bug where this, in many cases, doesn't work—with birthdays, custom dates, or related names, for instance. I took a wild guess as to the problem and did make a workaround for birthdays and made a working way to simply display the age of someone in the "birthday" field.
The trick was that the Address Book application doesn't execute the should enable action, action title, nor (presumably despite not testing it explicitly) perform action script terms correctly. In short, it doesn't specify thePerson nor theEntry. For things like custom dates this is a problem because I think you'd need theEntry variable to figure out which custom date is being clicked. But for things like birthdays you can fake it by using the current selection of the address book.
At least assuming only one entry is selected.
So I made up a script that calculates the age of a person and adds that to a menu choice on jeir birthday. Here's the script:
using terms from application "Address Book"
on action property
return "birth date"
end action property
on action title
tell application "Address Book"
try
set theCurrentPeople to selection
if (number of items in theCurrentPeople) is 1 then
set theCurrentPerson to item 1 of theCurrentPeople
set theBirthdate to (theCurrentPerson's birth date as date)
tell me to set theAge to roundOff from (((current date) - theBirthdate) / (365.25 * days)) to 1.0E-3
return "Age " & (theAge as text) & "."
else
return "Select one person."
end if
on error msg
return "Error: " & msg
end try
end tell
end action title
on should enable action
return true
end should enable action
on perform action for thePerson with theProperty
return ""
end perform action
end using terms from
on roundOff from num to precision
set theFixed to round (num / precision)
return (theFixed as number) * precision
end roundOff
And it looks like this:
Recent Comments