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.

È stato utile?

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'.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top