¿Por qué es tan lento un AppleScript para modificar los atributos de eventos del Calendario?

1

Estoy tratando de escribir un AppleScript bastante simple para automatizar el proceso de repetición de eventos del Calendario de forma masiva. Específicamente, quiero que cada evento en un calendario dado dentro de un lapso de tiempo dado tenga su repetición programada para ser quincenal.

Esto parece una tarea bastante rutinaria y rápida, pero la secuencia de comandos a continuación, cuando se ejecuta en aproximadamente 30 eventos en un lapso de una semana, toma aproximadamente una hora y media. Además, esto solo es cierto si dejo la computadora intacta mientras se ejecuta el script; si trato de usar la computadora portátil a la vez, la secuencia de comandos falla con un error que indica que el evento Apple se agotó.

De hecho, iterar a través de los eventos del calendario y acceder o modificar cualquiera de sus propiedades parece tomar un tiempo astronómicamente largo en AppleScript (por ejemplo, simplemente llamando a log en el summary de cada evento). He intentado mover la recuperación de eventos a una variable separada y usar atributos distintos a las fechas de eventos para obtener los eventos, pero nada parece mejorar el rendimiento.

¿Cuál es la razón de esta increíble lentitud y qué se puede hacer para aliviarla? ¿O es esto simplemente una parte inherente de AppleScript / macOS Scripting Bridge / Calendar?

Aquí está el script en cuestión:

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

Al observar la consola de "Respuestas", el script se ralentiza tanto en el Evento de Apple inicial count every event of calendar id "[ID]" como en cada intento de modificar la repetición de un evento.

Estoy ejecutando macOS Mojave 10.14.2 (Calendario 11.0) en una MacBook Pro a principios de 2015.

    
pregunta aaplmath 21.12.2018 - 03:53

1 respuesta

1

Usa CalendarLib. CalendarLib es una biblioteca de secuencias de comandos que le permite trabajar con eventos del calendario sin utilizar la aplicación Calendario. Es muy, muy rápido:

  

CalendarLib

     

CalendarLib es una biblioteca de script AppleScript para manipular eventos de calendario sin utilizar Calendar.app. Requiere OS X 10.9 o posterior, así como la biblioteca de scripts BridgePlus.

No sé por qué el calendario es tan lento con AppleScript.

    
respondido por el Christian Boyce 27.12.2018 - 07:52

Lea otras preguntas en las etiquetas