iCal AppleScript, como especificar 'o mesmo dia às 9'?

3

Eu sei que posso definir um novo evento do iCal programaticamente, por meio do AppleScript, definindo algo como:

 tell application "iCal"
    tell calendar "My Calendar"
        set theCurrentDate to current date
        set newEvent to make new event at end with properties {description:"Test Event Description", summary:"Test Event", location:"Foo Location", start date:date "21/5/2012", end date:date "23/5/2012", allday event:true}
        tell newEvent
            make new sound alarm at end with properties {trigger date: date "21/5/2012 09:00", sound name:"Glass"}
        end tell
    end tell
 end tell

No entanto, eu não estou muito feliz em ter que dizer uma data precisa em 'data de gatilho', eu prefiro poder especificar 'o mesmo dia às 9:00' ou '2 horas antes'. Isso é possível através da GUI, mas não consigo encontrar a sintaxe correspondente do AppleScript. Existe uma referência para esse tipo de coisa?

Obrigado antecipadamente.

    
por zakmck 21.05.2012 / 15:55

2 respostas

2

Se você estiver se referindo à caixa de entrada de linguagem natural que o iCal do Lion exibe quando você clica no botão + , essa funcionalidade parece não estar exposta ao AppleScript.

A referência para isso, na verdade, a primeira referência para o modelo de script de qualquer aplicativo, é o seu próprio dicionário de script - a interface de script documentada que você pode procurar na janela Biblioteca do editor AppleScript. O iCal está lá por padrão, assim como o dicionário da maioria dos aplicativos de script que vêm pré-instalados com o OS X, mas você pode adicionar qualquer aplicativo programável apenas soltando-o na janela (ou percorrendo a rota longa pelo botão + ) - é uma boa maneira de descobrir se um aplicativo é programável por scripts, por que, se não forem gerados por scripts, você simplesmente se recusará a se adicionar à Biblioteca.

    
por 21.05.2012 / 16:27
0

Eu sei, essa é uma pergunta antiga, mas ...

'no mesmo dia às 9:00':

-- 1.  Get the start date of the event
set evtStartDate to start date of newEvent
-- 2. Reset the time of that date (=> 00:00)
-- Not necessary in your example as you don't specify time so time is already 00:00
tell evtStartDate to set myTriggerDate to it - (its time)
-- 3. Add 9 hours to that date
set myTriggerDate to myTriggerDate + 9 * hours
-- 4. Set this date as the trigger date
tell newEvent
    make new sound alarm at end with properties {trigger date: myTriggerDate, sound name:"Glass"}
end tell

'2 horas antes de':

NOTAS: no seu exemplo 2 horas antes significa 2 horas antes de 21/5/2012 00:00:00 so 20/05/2012 22:00:00. Você precisa especificar o tempo em sua data de início se quiser algo mais.

-- 1. Get the start date of the event
set evtStartDate to start date of newEvent
-- 2. Subtract 2 hours to that date
set myTriggerDate to evtStartDate - 2 * hours
-- 3. Set this date as the trigger date
tell newEvent
    make new sound alarm at end with properties {trigger date: myTriggerDate, sound name:"Glass"}
end tell
    
por 21.06.2018 / 14:41