iCalには通知がありません(iChatが好きなアプリケーションもあります)ので、「開いたまま」のAppleScriptアプリケーションを実行する必要があります。このようなものはあなたの "B"シナリオのためにそれを行います。注: "applescriptPath"変数に、AppleScriptファイル(Skypeコールを作成するファイル)へのパスを追加する必要があります。
起動すると、iCalにあるすべてのカレンダーイベントのリストが表示されます。その後、それは5分ごとに実行されます。実行時には、現在のイベントを最初に作成したイベントのリストと照合します。新しいイベントがある場合は、新しいイベントにアラームとしてAppleScriptが追加されます。この方法では、ラン間の現在のイベントを追跡し、新しいイベントのみを検出します。
ですから、このスクリプトはあなたの出発点になるはずです。ステイオープンのアプリスクリプトアプリケーションとして保存することを忘れないでください。あなたはおそらくそれを変更したいでしょう。たとえば、私は新しいイベントのためにすべてのカレンダーをチェックしていますが、あなたは1つの特定のカレンダーをターゲットにすることができます。がんばろう。
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
おかげで(と応答遅れのためappologiesは - 正確に私の電子メール通知を設定していなかった!) – Dan
のPS。私は、スクリプトが実行されたあと、アイドル状態の///endアイドルルーチンが実行されていると考えていますか? – Dan
はいDan、 "on idle"ハンドラは繰り返し実行されるハンドラです。これが、あなたがそれを実行可能な状態にするためのアプリケーションです。あなたはend文の直前で、300秒ごとに実行するアイドルハンドラを指示する "return 300"を参照してください。したがって、起動時に「on run」と「on idle」ハンドラが実行され、300秒ごとに「on idle」ハンドラが再度実行されます。ドックアイコンを右クリックして終了すると、「終了時」ハンドラが実行されます。がんばろう。 – regulus6633