AppleScript per eventi iCal dalle voci della Rubrica

0

Voglio creare uno script che crea eventi allarmati in iCal per i compleanni delle persone che ho nella mia rubrica. Sfortunatamente, sto lavorando molto male con AppleScript.

Di seguito è riportato lo schema di ciò che devo fare, mi piacerebbe un po 'di aiuto su quale dovrebbe essere il vero script.

  • esegui lo script quando viene apportata una modifica a una data di nascita nella rubrica o quando si chiude la rubrica
  • definisce la lista delle persone (avrà un allarme extra, vedi sotto)
  • cerca i compleanni inseriti nella rubrica
  • se nessun evento è presente nel calendario ical denominato "compleanni" per i compleanni trovati nella rubrica (controllare nome e data)
    • crea un nuovo evento per tutto il giorno nel calendario dei compleanni con sveglia su data e titolo "Compleanno (Nome della persona)"
  • se il compleanno è sulla lista definita in precedenza
    • aggiungi un allarme extra due settimane prima del compleanno
  • mostra un messaggio che mostra quali nuovi eventi sono stati creati quando è stato eseguito lo script

Non penso che la sceneggiatura sarebbe così complessa o lunga. Qualsiasi aiuto sarebbe molto apprezzato.

Non sono sicuro di come questo script possa essere attivato, ma idealmente verrebbe eseguito se si apportasse una modifica a un compleanno nella rubrica (o una nuova aggiunta).

    
posta Sam 25.11.2011 - 02:15
fonte

3 risposte

1

Per impostare singoli avvisi su tutti i compleanni, puoi evitare del tutto uno script:

  1. Apri le Preferenze del calendario in Calendar.
  2. In Generale, seleziona "Mostra calendario compleanni".
  3. In Alerts, imposta un avviso per "Compleanni".

Non ho avuto il tempo di scrivere effettivamente un AppleScript per le parti del doppio allarme, ma questo article sembra coprire abbastanza bene gli avvisi di calendario degli script. Immagino che avresti solo bisogno di creare un file o un elenco nello script che contiene i nomi degli eventi (che puoi dedurre dalla convenzione di denominazione standard utilizzata dall'app Calendar).

Inoltre sto usando Mountain Lion con l'app Calendario. Non ricordo se i passaggi precedenti funzionano su versioni precedenti di iCal.

    
risposta data 02.03.2013 - 18:05
fonte
0

Credo che la differenza sia che il calendario del compleanno su ical non crea allarmi prima dell'evento. Né ti consente di aggiungerli manualmente.

Penso che potresti farlo funzionare con uno script di azioni cartella. Abilita il calendario dei compleanni in ical. Quindi allegare uno script alla cartella in cui sono memorizzati questi eventi. Quando viene aggiunto un nuovo evento (ovvero hai aggiunto un nuovo compleanno alla tua rubrica) lo script verrà attivato.

Ecco la cartella in cui ho trovato gli eventi dei compleanni:

/Library/Calendars/FA907C55-E8CD-4291-8173-B3F86886E2BF.calendar/Events

Potrebbe essere necessario esaminare gli elenchi di calendari finché non trovi la cartella corretta, ma dovrebbe trovarsi lì.

Da lì, lo script prende il nuovo elemento aggiunto alla cartella, quindi lo copia in un calendario separato e aggiunge l'allarme. Per configurarlo, creerei un nuovo calendario in cui desideri che questi nuovi eventi vengano eliminati. Porta gli eventi dal calendario dei compleanni e trascinali sul desktop o da qualche parte (verranno eliminati in seguito). Quindi apri ciascuno di essi. Ti chiederà a quale calendario vuoi aggiungerli, quindi scegli quel nuovo calendario che hai creato. Elimina i file, ecco qua, ora puoi aggiungere loro degli allarmi.

A seconda di quanti compleanni hai già, potresti scrivere uno script che aggiunga un evento a ciascuno di questi individualmente, oppure (se sei come me e hai così pochi bdays salvati) fallo manualmente. Una volta fatto, uno script di azioni per cartelle farebbe il trucco che stai cercando.

on adding folder items to this_folder after receiving these_items
    repeat with i from 1 to number of items in these_items
        set this_item to item i of these_items
        tell application "finder"
            move this_item to --location specifier of folder for new bday calendar
        end tell
    end repeat
    tell application "ical"
        reload calendars
        --add script here to add new alarms
    end tell
end on adding folder items to

Mi spiace, non ho il codice esatto per aggiungere l'allarme. Provalo e fammi sapere come funziona!

    
risposta data 25.11.2011 - 09:16
fonte
0

Rubrica già coordina con iCal per creare eventi in base alla data nel campo del compleanno di qualsiasi contatto. Se hai solo bisogno di allarmi, hai solo bisogno di un modo per aggiungere allarmi a questi eventi.

Il problema è che l'interfaccia utente di iCal presenta il calendario come se fosse di sola lettura. Ma per AppleScript, il calendario non è in realtà di sola lettura. Puoi utilizzare AppleScript per aggiungere allarmi agli eventi nel calendario "Compleanni":

on run
    (* Warning:
        This program will delete all the "display alarms" from the events in the
        synthetic "Birthdays" calendar. Usually, there are no alarms on these
        events because iCal treats this calendar as if it were read-only.

        The calendar is not, however, actually read-only when accessed through
        AppleScript. This program deletes all existing "display alarms" for all
        birthdays and sets a new one for 13.5 days before the the event
        (i.e. noon 14 days before, since the event occurs at midnight).
    *)
    tell application "iCal"
        set bcName to "Birthdays"
        set bc to a reference to calendar bcName
        if not (exists bc) then
            display alert "No “" & bcName & "” calendar!"
            return
        end if
        repeat with e in events of contents of bc
            -- make the following conditional if you only want alarms for some birthdays
            tell e
                delete display alarms
                make new display alarm with properties {trigger interval:-13.5 * 24 * 60}
            end tell
        end repeat
    end tell
end run

Ogni volta che esegui questo programma si verificherà, in modo efficace, che ogni compleanno abbia un allarme su di esso. Sembra che Address Book apporti solo modifiche minime quando aggiorna un evento di compleanno per un nome o una data di compleanno cambiati; gli allarmi persistono attraverso gli aggiornamenti da Address Book , ma questo potrebbe non essere affidabile poiché Address Book "possiede" questi eventi e potrebbe eliminarli e ricrearli completamente ogni volta che sentisse il bisogno per farlo.

Non conosco un modo ufficiale per ricevere le modifiche Address Book , ma come suggerisce l'altro, potresti essere in grado di collegare un'azione Folder alla cartella che contiene gli eventi per il calendario "Compleanni". Puoi aprire quella cartella con questo programma:

tell application "iCal" to set bcuid to uid of calendar "Birthdays"
path to library folder from user domain
tell application "Finder" to open folder "Events" of folder (bcuid & ".calendar") of folder "Calendars" of result

Poiché si tratta di un dettaglio interno, potrebbe non essere affidabile tra diverse versioni del sistema operativo. Tutto quanto sopra è stato sviluppato e testato su Mac OS X 10.6.8.

In alternativa, poiché il programma di cui sopra garantisce che ogni compleanno abbia un allarme, puoi semplicemente organizzarlo per eseguirlo una volta al giorno o una volta al login (puoi usare un evento iCal con un allarme "Esegui script" o salvare il programma come un'applicazione e impostarla come elemento di accesso).

Creare i propri eventi (nel proprio calendario) è certamente possibile, ma mantenerli sincronizzati con i dati del compleanno può essere complicato (la ricerca per "nome e data" di solito non è sufficiente perché l'utente potrebbe cambiare uno di questi e il tuo programma "make alarms" potrebbe non essere in grado di determinare i valori originali quando sa che un particolare contatto è stato aggiornato con un nuovo nome o data di compleanno). Address Book risolve questo problema codificando l'identificatore univoco interno del contatto nell'URL che salva nella proprietà url di ogni evento di compleanno; poiché il calendario è "di sola lettura" non deve preoccuparsi di un utente che modifica o elimina i suoi URL speciali, quindi può fare affidamento sulla loro accuratezza.

Cancelliamo tutti gli allarmi esistenti partendo dal presupposto che tutti gli allarmi sono "nostri" poiché Address Book non aggiunge allarmi da solo e iCal non consente agli utenti di aggiungere allarmi. Sfortunatamente, non esiste alcuna proprietà aggiuntiva in cui potremmo aggiungere qualsiasi tipo di identificatore univoco all'allarme stesso (sebbene se l'ora esatta dell'allarme non sia importante, potrebbe essere possibile codificare alcune informazioni nel valore numerico dell'offset dei minuti dell'allarme ). Sembra più facile eliminare gli allarmi e creare esattamente quello che vogliamo invece di controllare eventuali allarmi esistenti per vedere se corrispondono alla nostra attuale impostazione di allarme desiderata.

    
risposta data 25.11.2011 - 11:32
fonte

Leggi altre domande sui tag