我正在尝试编写一个Applescript,它会在收到来自其他方的邀请时安排拨打Skype电话。
我觉得我用Skype的API来调用这个脚本很好,但是我用iCal的任何一种方法都在努力
A)让脚本在后台运行并获取所有新事件的时间,或者
B)获取事件警报以运行一次性脚本。
选项B)的问题在于,尽管您可以在iCal中设置事件以便警报运行脚本,但我需要从已接收的事件中触发此事件。
一个典型的例子是:
**这可能同样适用于未来的日期,而且要求仍然有效。
非常感谢任何建议!
答案 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