rimuovi tutti gli avvisi di tutti i promemoria scaduti con AppleScript su OS X

1

Voglio rimuovere tutti gli allarmi / notifiche (potrebbero non esserci nessuno, uno o più di uno) di tutti i promemoria scaduti nell'app Promemoria di OS X.

Ho provato ad usare AppleScript per questo, ma avendo problemi a capire come lavorare correttamente con objects . Ho capito come ottenere tutti quei promemoria, però:

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

Questo codice è utilizzabile (eventuali errori fatali di cui non sono a conoscenza)? Come posso rimuovere gli allarmi?

[Modifica]

Ecco un esempio di ciò che voglio raggiungere:

Considera questo che mi ricorda di chiamare Jon Doe:

L'oggettoèscadutooggieunpromemoriaèimpostatoperavvisarmialle14.00(14:00).Quandolamiapianificazioneècambiata,cisonoalcunidiquestielementi,facendoapparireiloropromemoria("call jon doe" in questo esempio). Voglio che la proprietà "ricordami" sia deselezionata per tutti gli elementi scaduti.

    
posta muffel 08.09.2016 - 12:39
fonte

1 risposta

2

Non ci sono stati errori fatali nel codice mostrato nell'OP, tuttavia il modo corretto di usare current date , in questo caso, è lasciare che l'applicazione corrente lo faccia, non Promemoria, come in realtà sbaglia, ma recupera, quindi non è fatale. Tuttavia, si dovrebbe scrivere codice che non sta andando a vuoto errore. Quindi, prima del tell application "Reminders" blocco di codice , imposta current date su una variabile e usa la variabile all'interno del blocco di codice Promemoria , come mostrato nel codice più avanti.

Nota che personalmente non uso l'app Promemoria, tuttavia, passando da ciò che è esposto nel Dizionario AppleScript di Reminders, le seguenti proprietà , non contrassegnate come r/o , sono quelle che possono essere modificate a livello di codice per reminder classe .

name (text) : the name of the reminder
id (text, r/o) : the unique identifier of the reminder
body (text) : the notes attached to the reminder
completed (boolean) : Is the reminder completed?
completion date (date) : the completion date of the reminder
container (list, r/o) : the container of the reminder
creation date (date, r/o) : the creation date of the reminder
due date (date) : the due date of the reminder
modification date (date, r/o) : the modification date of the reminder
remind me date (date) : the remind date of the reminder
priority (integer) : the priority of the reminder

Come test, ho creato un promemoria chiamato "Test" e impostato la ricordami [√] casella di controllo a data di ieri , in modo da conformarsi con il parametro di ricerca nel codice più sotto.

Quindi, in Script Editor, ho usato la seguente riga di code per ottenere le sue proprietà .

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

Ha restituito:

  • {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"}

Ho quindi deselezionato manualmente la casella di controllo ricordami [] e ho eseguito di nuovo il ... get properties ... codice .

Ha restituito:

  • {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 differenza principale tra i due è stata la prima e l'ultima elementi nella lista , ovvero due date e remind me date , passati da due date:date "Saturday, September 10, 2016 2:00:00 PM" a due date:missing value con lo stesso per remind me date , avendo anche remind me date:missing value .

Quindi ho provato il codice sotto usando entrambe le preferenze , due date e remind me date solo per vedere se c'era qualche differenza e non c'era, come rimozione uno rimosso l'altro.

Il seguente codice rimuoverà sia due date che remind me date da qualsiasi promemoria più vecchio di current date e non è stato contrassegnato completed , a quando viene eseguito il codice , poiché questo è ciò che accade, almeno per le proprietà di reminder , in uno si deseleziona manualmente mi ricorda [ ] casella di controllo .

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

Il codice sopra può anche essere scritto come mostrato di seguito. Questo è in realtà un modo migliore per scriverlo, poiché rende un elenco più piccolo restituito perché crea solo un elenco di elementi ( reminders ) che non hanno ancora stato contrassegnato come completato . Dopo tutto, quelli già contrassegnati come completati non attiveranno un "allarme".

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

In base al tuo OP modificato, se questo non fa ciò che è necessario, allora non so cos'altro posso offrire, dato che posso lavorare solo con ciò che proprietà è esposto e modificabile.

Nota: non ero in grado di riprodurre il promemoria come mostrato nella tua modifica, cioè la riga che inizia con "due" direttamente sotto la casella di controllo [] At a Location e sopra "ripeti Nessuno ". Tuttavia, ciò che ora viene offerto come risposta a "rimuovere tutti gli avvisi di tutti i promemoria scaduti con AppleScript su OS X" simula l'azione manuale di deselezionare la casella di controllo ricordami [] , che è ciò che hai chiesto ora tramite la modifica apportata all'OP. Spero che questo risolva il tuo problema.

    
risposta data 09.09.2016 - 04:56
fonte

Leggi altre domande sui tag