1 votos

¿Por qué es tan lento un AppleScript para modificar atributos de un evento de calendario?

Estoy tratando de escribir un AppleScript bastante simple para automatizar el proceso de hacer que los eventos del Calendario se repitan en masa. Específicamente, quiero que cada evento en un calendario dado dentro de un periodo de tiempo dado tenga su repetición establecida como quincenal.

Esto parece ser una tarea bastante rutinaria y rápida, pero el script a continuación, cuando se ejecuta en aproximadamente 30 eventos en un lapso de una semana, tarda alrededor de una hora y media en completarse. Además, esto solo es cierto si dejo la computadora sin tocar mientras se ejecuta el script; si intento usar la computadora portátil al mismo tiempo, el script eventualmente falla con un error que indica que un Evento de Apple se cronometró.

De hecho, iterar a través de los eventos del calendario y acceder o modificar cualquiera de sus propiedades parece llevar un tiempo astronómicamente largo en AppleScript (por ejemplo, simplemente llamar a log en el summary de cada evento). He intentado mover la búsqueda de eventos a una variable separada y usar atributos que no sean fechas de eventos para buscar 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 simplemente una parte inherente de AppleScript / Scripting Bridge de macOS / Calendario en sí mismo?

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 ver 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 recurrencia de un evento.

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

0 votos

@CJK eso es posible, pero incluso solo hacer log summary de e como texto en el bucle —sin ningún script de shell o cálculo adicional— hace que funcione lentamente.

0 votos

@CJK Desafortunadamente, usar una referencia a parece ser tan lento como el enfoque original.

1voto

Seif Puntos 121

Utiliza CalendarLib. CalendarLib es una Biblioteca de Scripts que te permite trabajar con eventos de calendario sin utilizar la aplicación Calendario. Es muy, muy rápido:

CalendarLib

CalendarLib es una biblioteca de scripts 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é Calendar es tan lento con AppleScript.

0 votos

Desafortunadamente, CalendarLib no admite la recurrencia de eventos quincenales, por lo que no funcionará en esta situación.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X