如何获取_received_ iCal事件来运行脚本?

时间:2012-02-23 22:57:18

标签: applescript skype icalendar

我正在尝试编写一个Applescript,它会在收到来自其他方的邀请时安排拨打Skype电话。

我觉得我用Skype的API来调用这个脚本很好,但是我用iCal的任何一种方法都在努力

A)让脚本在后台运行并获取所有新事件的时间,或者

B)获取事件警报以运行一次性脚本。

选项B)的问题在于,尽管您可以在iCal中设置事件以便警报运行脚本,但我需要从已接收的事件中触发此事件。

一个典型的例子是:

  • 主机上运行的所有脚本和iCal
  • 上午10点,用户安排一个事件(通过便携式设备上的google cal)下午3点,并邀请主持人。
  • 主机上的脚本在下午3点使用Skype API拨打用户电话。

**这可能同样适用于未来的日期,而且要求仍然有效。

非常感谢任何建议!

1 个答案:

答案 0 :(得分:2)

由于iCal没有任何通知(某些应用程序喜欢iChat),您必须运行“保持打开”的AppleScript应用程序。像这样的东西会为你的“B”场景做这件事。注意:您必须在“applescriptPath”变量中添加Applecript文件(进行Skype调用的文件)的路径。

启动后,它会列出您在iCal中拥有的所有日历活动。然后它将每5分钟运行一次。当它运行时,它将根据它最初发生的事件列表检查当前事件。如果有新事件,那么您的applescript将作为警报添加到新事件中。这样它就可以跟踪运行之间的当前事件,只查找新的事件。

所以这个脚本应该是一个很好的起点。请记住将其保存为一个保持开放的AppleScript应用程序。您可能想要修改它。例如,我让它检查每个日历以查找新事件,但您可能有一个要定位的特定日历。祝你好运。

property storedUIDs : {} -- we use this to check for new events, if an event is not in this list then it is new

global applescriptPath

on run
    set applescriptPath to (path to desktop as text) & "myAlarm.scpt" -- the path to the applescript which is run as the alarm
end run

on idle
    set newEvents to {}
    tell application "iCal"
        set theCals to calendars
        set allUIDs to {}
        repeat with aCal in theCals
            tell aCal
                set theseEvents to events
                repeat with anEvent in theseEvents
                    set thisUID to uid of anEvent
                    set end of allUIDs to thisUID
                    if thisUID is not in storedUIDs then
                        set end of newEvents to contents of anEvent
                    end if
                end repeat
            end tell
        end repeat
        set storedUIDs to allUIDs

        if (count of newEvents) is less than 5 then -- this will prevent the first run of the script from adding the alarm to every event
            repeat with aNewEvent in newEvents
                -- do something with this new events like add an alarm to run an applescript
                set theAlarm to make new open file alarm at end of open file alarms of aNewEvent with properties {trigger interval:0, filepath:POSIX path of applescriptPath}
            end repeat
        end if
    end tell

    return (5 * 60) -- run every 5 minutes
end idle

on quit
    set storedUIDs to {}
    continue quit
end quit