Perché un AppleScript è in grado di modificare gli attributi degli eventi di Calendar in modo lento?

1

Sto provando a scrivere un AppleScript abbastanza semplice per automatizzare il processo di ripetizione degli eventi di Calendar in blocco. Nello specifico, voglio che ogni evento su un dato calendario entro un determinato periodo di tempo abbia la sua ripetizione impostata per essere bisettimanale.

Questo sembra un compito abbastanza normale e veloce, ma lo script seguente, quando viene eseguito su circa 30 eventi in un arco di una settimana, richiede circa un'ora e mezzo per essere completato. Inoltre, questo è vero solo se lascio il computer intatto mentre viene eseguito lo script; se provo a usare il portatile contemporaneamente, lo script alla fine fallisce con un errore che indica che un evento Apple è scaduto.

In effetti, l'iterazione degli eventi del calendario e l'accesso o la modifica di qualsiasi proprietà sembrano richiedere molto tempo astronomicamente in AppleScript (ad esempio, chiamando solo log sul summary di ciascun evento). Ho provato a spostare il recupero dell'evento su una variabile separata e ad utilizzare attributi diversi dalle date degli eventi per recuperare gli eventi, ma nulla sembra migliorare le prestazioni.

Qual è la ragione di questa incredibile lentezza e cosa si può fare per alleviarlo? O questa è semplicemente una parte intrinseca di AppleScript / macOS Scripting Bridge / Calendar stesso?

Ecco lo script in questione:

tell application "Calendar"
    set cal to calendar 1 whose name is "Schedule"
    set theStartDate to date "Sunday, January 27, 2019 at 00:00:00"
    set theEndDate to date "Saturday, February 2, 2019 at 00:00:00"
    repeat with e in (every event of cal whose start date is greater than theStartDate and start date is less than theEndDate)
        set esStartDate to e's start date
        set theWeekday to weekday of esStartDate
        set lower to text 1 thru 2 of (theWeekday as string)
        set upper to do shell script "echo " & lower & " | tr [:lower:] [:upper:]"
        set e's recurrence to "FREQ=WEEKLY;INTERVAL=2;UNTIL=20190602T035959Z;BYDAY=" & upper & ";WKST=SU"
    end repeat
end tell

Guardando la console "Replies", lo script rallenta sia sull'evento iniziale count every event of calendar id "[ID]" Apple, sia su ogni tentativo di modificare la ricorrenza di un evento.

Sto eseguendo macOS Mojave 10.14.2 (Calendar 11.0) su un MacBook Pro all'inizio del 2015.

    
posta aaplmath 21.12.2018 - 03:53
fonte

1 risposta

1

Usa CalendarLib. CalendarLib è una libreria di script che consente di lavorare con gli eventi del calendario senza utilizzare l'app Calendario. È molto, molto veloce:

CalendarLib

CalendarLib is an AppleScript script library for manipulating calendar events without using Calendar.app. It requires OS X 10.9 or later, as well as the BridgePlus script library.

Non so perché Calendar sia così lento con AppleScript.

    
risposta data 27.12.2018 - 07:52
fonte

Leggi altre domande sui tag