eliminar todas las alarmas de todos los recordatorios vencidos con AppleScript en OS X

1

Quiero eliminar todas las alarmas / notificaciones (puede haber ninguna, una o más de uno) de todos los recordatorios de vencimiento en la aplicación de Recordatorios de OS X.

Traté de usar AppleScript para esto, pero tengo problemas para entender cómo trabajar correctamente con objetos . Sin embargo, descubrí cómo obtener todos esos recordatorios:

tell application "Reminders"
    activate
    set myRemList to every reminder whose due date is less than (current date) as list
    repeat with myitem in myRemList
        log (get properties of myitem)
    end repeat
end tell

¿Se puede usar este código (cualquier error fatal que no conozca)? ¿Cómo puedo eliminar las alarmas?

[Editar]

Aquí hay un ejemplo de lo que quiero lograr:

Considere este que me recuerda que debo llamar a Jon Doe:

Elelementosedebeentregarhoyyhayunrecordatorioprogramadoparanotificarmealas14:00(14:00).Cuandomiplanificaciónhacambiado,hayalgunosdeesoselementos,quemuestransusrecordatorios("call jon doe" en este ejemplo). Quiero que la propiedad "recordarme" se desmarque de todos los elementos vencidos.

    
pregunta muffel 08.09.2016 - 12:39

1 respuesta

2

No hubo ningún error fatal en el código que se muestra en el OP, sin embargo, la forma correcta de utilizar current date , en este caso, es dejar que la aplicación actual lo haga, no Recordatorios, como en realidad se descompone pero se recupera, por lo tanto no es fatal No obstante, uno debería escribir código que no va a cometer errores innecesariamente. Por lo tanto, antes del tell application "Reminders" bloque de código , establezca current date en una variable y use la variable dentro del bloque de código de recordatorios , como se muestra en el código más abajo.

Tenga en cuenta que yo personalmente no uso la aplicación Reminders, sin embargo, siguiendo lo que se expone en el Diccionario AppleScript de Reminders, las siguientes propiedades , no marcadas como r/o , son las que se pueden cambiar mediante programación para el reminder class .

  

name (texto): el nombre del recordatorio
id (texto, r / o): el identificador único del recordatorio
cuerpo (texto): las notas adjuntas al recordatorio
completado (booleano): ¿Se completó el recordatorio?
fecha de finalización (fecha): la fecha de finalización del recordatorio
contenedor (lista, r / o): el contenedor del recordatorio
< strong> fecha de creación (fecha, r / o): la fecha de creación del recordatorio
fecha de vencimiento (fecha): la fecha de vencimiento del recordatorio
fecha de modificación (fecha, r / o): la fecha de modificación del recordatorio
recordarme fecha (fecha): la fecha de recordatorio del recordatorio
prioridad (entero): la prioridad del recordatorio

Como prueba, creé un recordatorio llamado "Prueba" y configuré recordarme [√] casilla de verificación a fecha de ayer , para cumplir con el parámetro de búsqueda en el código más abajo.

Luego, en el Editor de secuencias de comandos, usé la siguiente línea de código para obtener sus propiedades .

tell application "Reminders" to get properties of reminder named "Test"

Devolvió:

  • {due date:date "Saturday, September 10, 2016 2:00:00 PM", modification date:date "Sunday, September 11, 2016 1:49:35 PM", class:reminder, body:missing value, completed:false, completion date:missing value, id:"3F0EF538-5DF6-4F1C-8024-922B5D45EB9B", name:"Test", container:list id "9EB58C9B-EF63-4B72-88C3-A4FFA3C7272F" of application "Reminders", priority:0, creation date:date "Sunday, September 11, 2016 1:49:13 PM", remind me date:date "Saturday, September 10, 2016 2:00:00 PM"}

Luego, desmarque manualmente el recordarme [] casilla de verificación y ejecuté el código ... get properties ... de nuevo.

Devolvió:

  • {due date:missing value, modification date:date "Sunday, September 11, 2016 1:49:35 PM", class:reminder, body:missing value, completed:false, completion date:missing value, id:"3F0EF538-5DF6-4F1C-8024-922B5D45EB9B", name:"Test", container:list id "9EB58C9B-EF63-4B72-88C3-A4FFA3C7272F" of application "Reminders", priority:0, creation date:date "Sunday, September 11, 2016 1:49:13 PM", remind me date:missing value}

La diferencia principal entre los dos fue el primero y el último elementos en la lista , es decir, el due date y el remind me date , pasaron de due date:date "Saturday, September 10, 2016 2:00:00 PM" a due date:missing value con lo mismo para remind me date , teniendo remind me date:missing value también.

Así que probé el código a continuación usando ambas preferencias , due date y remind me date solo para ver si había alguna diferencia y no hubo, como eliminación uno quitó el otro.

El siguiente código eliminará tanto due date como remind me date de cualquier Recordatorio que sea anterior a current date y que no haya sido marcado completed , en la hora en que se ejecuta el código , ya que esto es lo que ocurre, al menos en las propiedades de un reminder , en una de ellas se ha desactivado manualmente el recordarme [ ] casilla de verificación .

set curDate to current date

tell application "Reminders"
    activate
    set myRemList to every reminder whose due date is less than curDate as list
    repeat with myitem in myRemList
        if completed of myitem is false then
            delete remind me date of myitem
        end if
    end repeat
end tell

El código anterior también se puede escribir como se muestra a continuación. En realidad, esta es una mejor manera de escribirlo, ya que hace que se devuelva una lista más pequeña porque solo crea una lista de elementos ( reminders ) que aún no han ha sido marcado como completado . Como después de todo, los que ya están marcados como completado no activarán una "alarma".

set curDate to current date

tell application "Reminders"
    activate
    set myRemList to every reminder whose completed is false and due date is less than curDate as list
    repeat with myitem in myRemList
        delete remind me date of myitem
    end repeat
end tell

Según su OP editado, si esto no hace lo que se necesita, entonces no sé qué más puedo ofrecer, ya que solo puedo trabajar dentro de las propiedades expuestas y editables.

Nota: no pude reproducir el recordatorio como se muestra en su edición, es decir, la línea que comienza con "vencimiento" directamente debajo de la [] En una ubicación casilla de verificación y encima de "repetir Ninguna ". Sin embargo, lo que ahora se ofrece como respuesta a "eliminar todas las alarmas de todos los recordatorios vencidos con AppleScript en OS X" imita la acción manual de desmarcar la casilla de verificación recordarme [] , que es lo que has pedido ahora a través de la edición realizada en el OP. Espero que esto resuelva tu problema.

    
respondido por el user3439894 09.09.2016 - 04:56

Lea otras preguntas en las etiquetas