Applescript e l'interazione iCal
-
06-09-2019 - |
Domanda
Sto cercando di scrivere un AppleScript per interrogare iCal e trovare tutti gli eventi che ho ottenuto per una determinata data, in ogni calendario.
Ho iniziato scrivendo un semplice script che fa qualcosa di semplice con ogni evento in una data del calendario:
tell application "iCal"
tell calendar "Reuniones"
set the_events to every event
repeat with an_event in the_events
-- do something with every event
set value to summary of an_event
end repeat
end tell
end tell
Tuttavia, questo semplice script è preso un sacco di tempo per eseguire (pochi secondi), anche se io non sto facendo nulla di complesso all'interno del ciclo. Ho paura che lo script vero e proprio sarà davvero prendere un sacco di tempo per l'esecuzione.
Non ho molta familiarità con Applescript, e quindi immagino che sto facendo qualcosa di stupido che ha gravi implicazioni sulle prestazioni.
Qualcuno mi può spiegare perché questo prende più di tanto per eseguire? Qualcuno può suggerire qualcosa per migliorare il mio codice? Ora sto andando a avviare il controllo della data della manifestazione, con una condizione nel ciclo. Ho il sospetto che ci deve essere un modo per cercare gli eventi con una data (come l'azione di Automator fa), ma non sono stato in grado di trovare un modo "nativo" per farlo ....
Modifica : Sto utilizzando Mac OS X Tiger (10.4). E 'possibile che nuove versioni di iCal hanno migliorato la biblioteca delle operazioni disponibili.
Soluzione
Sono stato alle prese con questo oggi e scoperto che è possibile filtrare per data (almeno su Snow Leopard). Quindi
tell application "iCal"
set out to ""
set todaysDate to current date
set time of todaysDate to 0
repeat with c in (every calendar)
set theEvents to (every event of c whose start date ≥ todaysDate)
repeat with current_event in theEvents
set out to out & summary of current_event & "\n"
end repeat
end repeat
return out
end tell
restituirà la sintesi di tutti gli eventi futuri, e molto rapidamente, rispetto a scorrendo tutti gli eventi.
Altri suggerimenti
Non è AppleScript, ma il migliore del gruppo di altri modi per fare questo sembra essere iCalBuddy , che utilizza le API pubbliche di cacao piuttosto che l'analisi direttamente il file di calendario e maniglie ripetere gli eventi sensibilmente.
icalBuddy -nc -eed -iep title,datetime eventsToday+1
Il mio intento iniziale era quello di selezionare solo gli eventi per una certa data, ma a quanto pare non ci sono metodi in iCal per accedere solo gli eventi per un giorno specifico.
In questo modo, è sempre necessario andare oltre tutti gli eventi registrati in ogni calendario. Anche quando vi ha interesse negli eventi di un calendario unico, dire 'di oggi Incontri", è necessario passare attraverso l'intera serie di eventi.
Le migliori alternative che ho trovato in giro per il web non utilizzare Apple Script, ma invece di elaborare i file 'CI', dove le informazioni sono in realtà conservato.
Per riferimento, i file si trovano in '~ / Library / ApplicationSupport / iCal'.