Erinnerung für mehrere Termine im iCal

Diskutiere mit über: Erinnerung für mehrere Termine im iCal im Scripting und Automatisierung Forum

  1. floeru

    floeru Thread Starter MacUser Mitglied

    Beiträge:
    52
    Zustimmungen:
    0
    Registriert seit:
    10.10.2004
    Hallo experts! :)

    Habe heute schon wieder beinahe einen Geburtstag verpasst, weil bei den Geburtstag-Serientermine im iCal keine Erinnerung eingestellt ist.

    Jetzt möchte ich bei sämtlichen Terminen mit "Geburtstag" im Titel eine "Message with Sound" und "the day before at 20:00" erstellen. Selbstverständlich für "All further events". Nur ist das bei ca. 50 dieser Termine doch recht aufwändig.

    Gibt dafür ein AppleScript? Mit dem Automator kann man scheinbar keine Termine abändern. Ich bin ein absoluter Noob (switcher ;)) auf diesem Gebiet.
     
  2. Andi

    Andi MacUser Mitglied

    Beiträge:
    7.826
    Zustimmungen:
    653
    Registriert seit:
    16.05.2002
    ...

    Hallo floeru,

    Jetzt ja ;)

    Code:
    set all_calendars to {}
    set this_calendars to {}
    set the_trigger_time to {-240}
    set the_recurrence to {"FREQ=YEARLY;INTERVAL=1"}
    
    tell application "iCal"
    	set this_calendars to calendars whose writable is true
    	repeat with i from 1 to count of this_calendars
    		copy title of item i of this_calendars to end of all_calendars
    	end repeat
    end tell
    
    set the_choice to choose from list all_calendars with prompt "Wählen Sie den Geburtstags-Kalender aus" OK button name "OK" without multiple selections allowed and empty selection allowed
    
    if the_choice is not false then
    	set this_calendar to item 1 of the_choice
    end if
    set name_calendar to this_calendar
    set i to 1
    repeat with an_item in all_calendars
    	if item i of all_calendars is equal to name_calendar then
    		set the_id to i
    		exit repeat
    	end if
    	set i to i + 1
    end repeat
    
    set current_calendar to item the_id of this_calendars
    
    tell application "iCal"
    	activate
    	display dialog "Alte Alarmzeiten entfernen?" buttons {"Ja", "Nein"} default button 2
    	copy the result as list to {remove_old_alarms}
    	repeat with i from 1 to count events in current_calendar
    		set this_event to event i of current_calendar
    		if remove_old_alarms is equal to "Ja" then
    			repeat with j from 1 to count sound alarms in this_event
    				delete last sound alarm of this_event
    			end repeat
    		end if
    		set recurrence of this_event to item 1 of the_recurrence
    		make new sound alarm at end of sound alarms of this_event with properties {trigger interval:(item 1 of the_trigger_time)}
    	end repeat
    	
    end tell
    Gruß Andi
     
  3. floeru

    floeru Thread Starter MacUser Mitglied

    Beiträge:
    52
    Zustimmungen:
    0
    Registriert seit:
    10.10.2004
    Vielen Dank Andi für deine Hilfe! :)

    Dein Script hat sehr gut funktioniert, ehrlich gesagt sogar zu gut! ;) Etwas voreilig habe ich das Script auf den "Privat" Kalender ausgeführt weshalb jetzt sämtliche Termine zu einer Serie wurden, was natürlich nicht beabsichtigt war. Tja, und ich Noob habe natürlich kein Backup von meinem Kalender gemacht! :rolleyes: Shame on me!

    Ich habe erst anschliessend gemerkt, dass ich ja mit dem Adressbook automatisch Geburtstage erstellen kann. Das habe ich dann aber gemacht und alle alten Geburtstagstermine gelöscht. Allerdings ist auch bei diesen Terminen keien Erinnerung eingestellt, weshalb ich dein Script so oder so brauchen kann.

    Anyway, jetzt versuche ich die Sache natürlich wieder gerade zu biegen, also die ungewollten Serientermine zu löschen. Mit dem Automator will das irgendwie nicht richtig klappen da die Termine IMHO ziemlich willkürlich selektiert werden. Ich möchte nur gewisste Termine ab November 2006 löschen, doch es werden auch ältere Termine gelöscht.

    Es wäre wohl am einfachsten, dein Script so anzupassen, dass bei allen Terminen die Wiederholung und die Erinnerung gelöscht wird. Leider habe ich nicht herausgefunden, wie ich den Code hier anpassen muss:
    Code:
    set the_recurrence to {"FREQ=YEARLY;INTERVAL=1"}
    Anschliessend kann ich ja dann wieder das urspünchlie Script anwenden. Nur: Bei der Auswahl des Kalenders kann ich nur zwischen Büro und Privat wählen. Der von iCal automatisch erstellte Birthdays Kalender steht dort komischerweise nicht zur Auswahl??

    Irgendwie bin ich bei der ganzen Sache noch mehr überfordert, als wenn ich jeweils versuche mit Visual Basic ein Excel Makro zu programmieren! :D

    Hoffentlich kannst du mir aus der Patsche helfen! :)
     
  4. Andi

    Andi MacUser Mitglied

    Beiträge:
    7.826
    Zustimmungen:
    653
    Registriert seit:
    16.05.2002
    ...

    Hallo floeru,

    der Geburtstagskalender von iCal ist schreibgeschützt darum taucht der auch nicht in der Auswahlliste auf.
    set this_calendars to calendars whose writable is true
    Ich bin auch davon ausgegangen, du hast den Kalender mit diesem Skript erstellt, welches traurigerweise mit der neuen iCal Version gar nicht funktioniert. Oder mit diesem Tool welches auch nicht funktioniert.

    Nunja du hast richtig erkannt, was geändert werden muss. Tut mir auch leid, dass ich mich erst jetzt melde. Ich konnte es auch nicht ändern :rolleyes:
    Logisch wäre ja
    set the_recurrence to {""}
    das wird aber nicht angenommen. Man kann alle möglichen gültigen Wiederholungen eintragen, aber nicht ohne :(
    Da bin ich ehrlich gesagt stinkesauer darüber.

    Ich kann dir folgende Möglichkeit anbieten, das Problem zu beheben.
    Als erstes setzt du -- vor die Zeile " make new sound alarm at end of sound alarms of this_event with properties {trigger interval:(item 1 of the_trigger_time)}" damit wird diese Anweisung zu einem Kommentar und nicht ausgeführt.
    Du lässt das Skript noch mal über den Kalender "Privat" laufen und bestätigst "Alte Alarme löschen".

    Nun beendest du iCal!

    Um die Wiederholung zu löschen, gehst du ins Verzeichnis ~/Library/Application Support/iCal/Sources/ in deinem Userverzeichnis. Dort liegen die Kalender in Ordnern mit kryptischer Bezeichnung (hasse ich auch sowas). Um den Kalender Privat zu finden, öffnest du die Ordner der Reihe nach und ziehst jeweils die Datei "Info.plist" auf das TextEdit (in Programme) Icon um es zu öffnen.
    Es muss so:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Key</key>
    <string>F7BCC920-BA61-43A1-B635-3C7FD7191099</string>
    <key>Title</key>
    <string>Privat</string>
    <key>Type</key>
    <string>com.apple.ical.sources.naivereadwrite</string>
    </dict>
    </plist>
    aussehen.
    In diesem Ordner befindet sich auch ein File namens "corestorage.ics" das Ist die eigentliche Kalenderdatei. Diese ziehst du auch auf das TextEdit Icon um es zu öffnen. Mit apfel-f rufst du nun den Suchen-Dialog auf. In die erste Zeile "Suchen nach:"setzt du "FREQ=YEARLY;INTERVAL=1" mit den Anführungszeichen! ein. Die Zweite Zeile "Ersetzen durch:" lässt du leer. Danach den linken Button "Alles Ersetzen" drücken."
    Jetzt kannst du iCal wieder öffnen und die Wiederholungen in den Events sind weg. Jetzt brauchst du natürlich eine neue Erinnerung für deine Termine.

    Dazu wieder das Skript anpassen. -- vor " make new sound alarm at end of sound alarms of this_event with properties {trigger interval:(item 1 of the_trigger_time)}" entfernen und nur vor "with properties {trigger interval:(item 1 of the_trigger_time)}"in der selben Zeile setzten. Eine Zeile höher --vor die Zeile "set recurrence of this_event to item 1 of the_recurrence" setzen, damit nicht wieder eine Wiederholung eingetragen wird.

    OK - mein Fehler war das nicht vorher zu prüfen. Die Funktion "Geburtstagskalender einblenden" habe ich auch übersehen. Selbst wenn ich sie gesehen hätte, wäre ich NIIIEEE! auf die Idee gekommen etwas in einen "schreibgeschützten" Kalender einzutragen denn "set writable of calendar xy to true/false" geht geschickter weise auch nicht. :mad:

    Das Script lautet also:

    Code:
    tell application "iCal"
    activate
    	set this_calendars to calendars whose writable is false
    	set this_calendar to item 1 of this_calendars
    	repeat with i from 1 to count events in this_calendar
    		set this_event to event i of this_calendar
    		make new sound alarm at end of sound alarms of this_event with properties {trigger interval:-240, sound name:"Basso"}
    	end repeat
    end tell
    das trigger interval sind Minuten. Negative Zahlen vor dem Ereignis und positive Zahlen nach dem Ereignis.
    der sound name ist der wie in der Auswahlliste.

    Vorsicht: Jedweder Logik kannst du einen Soundalarm anhängen, dieser wird aber sofort schreibgeschützt. Du kannst alles aber zurücksetzten, indem du den Kalender löscht und in Einstellungen erneut anzeigen lässt.

    Sorry für die Unannehmlichkeiten...

    Gruß Andi
     
    Zuletzt von einem Moderator bearbeitet: 24.10.2015
  5. Andi

    Andi MacUser Mitglied

    Beiträge:
    7.826
    Zustimmungen:
    653
    Registriert seit:
    16.05.2002
    ...

    Hallo floeru,

    hmm - noch was. Hast du die Alten Alarme überhaupt gelöscht beim ersten mal? Dann wären ja noch die alten Alarmzeiten erhalten. Dann nicht löschen...
    Hoffentlich ist's noch nicht zu spät :rolleyes:

    Gruß Andi
     
  6. floeru

    floeru Thread Starter MacUser Mitglied

    Beiträge:
    52
    Zustimmungen:
    0
    Registriert seit:
    10.10.2004
    Hallo Andi

    Hoffentlich liest du hier noch mit! :) Habe meinen Kalender dank deiner Hilfe wieder fit gekriegt. Nun bin ich wieder beim Ursprungsproblem, Erinnerungen für den Geburtstagskalender zu setzten.

    Mit dem oben zitierten Script funktioniert dies zwar einwandfrei, nur werden die Einstellungen nicht gespeichert. Nach einem iCal Neustart sind sie weg... Das hat sicher etwas mit dem Schreibschutz zu tun, oder? Gibt es da keine Möglichkeit, den Schreibschutz zu umgehen oder habe ich bei deiner erläuterung oben etwas überlesen?

    Gruss und Danke für die Hilfe!
    floeru
     
  7. zause

    zause MacUser Mitglied

    Beiträge:
    6
    Zustimmungen:
    0
    Registriert seit:
    26.08.2003
    Mir haben die Ratschläge von Andi auch geholfen, allerdings bei einem anderen Problem...

    @Andi: Danke!

    @floeru: Schau dir doch mal Dates to iCal an. Damit kannst du dir nen neuen Geburtstagskalender aus dem Adressbuch machen mit editierbaren Einträgen und auch welche hinzufügen.

    Man sollte den Kalender nur nicht "Geburtstage" nennen, weil er dann in den von iCal erstellten reinschreibt und dann hat man alles doppelt (ich spreche aus Erfahrung)!

    Was mich noch dran gestört hat, war dass die Geburtstage dann als Vorname Nachname's birthday drinstehen: dazu hab ich das Kalenderfile geöffnet, wie Andi es beschrieben hat und Suchen und Ersetzen gemacht.
    Jetzt ist alles zu meiner Zufriedenheit! :)

    Gruß, zause
     
Die Seite wird geladen...
Ähnliche Themen - Erinnerung mehrere Termine Forum Datum
Daten aus verschiedenen Textdateien filtern und in eine Textdatei kopieren Scripting und Automatisierung 23.10.2015
Applescript iTunes: mehrere Tracks bzw. Liste von Tracks auf einmal löschen Scripting und Automatisierung 09.10.2015
Erinnerung beim Ausschalten Scripting und Automatisierung 30.03.2013
iCloud Erinnerung mit AS erstellen Scripting und Automatisierung 29.05.2012
iCal und Erinnerung an Teilnehmer Scripting und Automatisierung 09.03.2005

Diese Seite empfehlen

Benutzerdefinierte Suche