library/calendar_sync.py aktualisiert
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
from caldav import DAVClient
|
||||
import vobject
|
||||
@ -10,8 +11,12 @@ def fetch_ics_events(url, user=None, password=None):
|
||||
try:
|
||||
response = requests.get(url, auth=(user, password) if user else None)
|
||||
response.raise_for_status()
|
||||
cal = vobject.readOne(response.text)
|
||||
return [comp for comp in cal.components() if comp.name == 'VEVENT']
|
||||
# Alle VEVENTs aus ICS-Datei extrahieren
|
||||
events = []
|
||||
for component in vobject.readComponents(response.text):
|
||||
if hasattr(component, "vevent"):
|
||||
events.append(component.vevent)
|
||||
return events
|
||||
except Exception as e:
|
||||
raise Exception(f"ICS-Fehler: {str(e)}")
|
||||
|
||||
@ -47,20 +52,21 @@ def sync_ics_to_caldav(module):
|
||||
module.params['verify_ssl']
|
||||
)
|
||||
|
||||
# Bestehende Events aus dem Zielkalender einlesen und UIDs extrahieren
|
||||
# Bestehende Events analysieren
|
||||
existing_events = {}
|
||||
for event in target_cal.events():
|
||||
try:
|
||||
vobj = vobject.readOne(event.data)
|
||||
uid = str(vobj.vevent.uid)
|
||||
existing_events[uid] = event
|
||||
for vobj in vobject.readComponents(event.data):
|
||||
if hasattr(vobj, "vevent"):
|
||||
uid = str(vobj.vevent.uid)
|
||||
existing_events[uid] = event
|
||||
except Exception as e:
|
||||
raise Exception(f"Fehler beim Parsen eines bestehenden Events: {str(e)}")
|
||||
|
||||
changed = False
|
||||
results = {'added': [], 'updated': [], 'removed': []}
|
||||
|
||||
# Neue ICS-Events einfügen oder updaten
|
||||
# Neue Events hinzufügen oder aktualisieren
|
||||
for vevent in ics_events:
|
||||
uid = str(vevent.uid)
|
||||
ical_data = vevent.serialize()
|
||||
@ -75,7 +81,7 @@ def sync_ics_to_caldav(module):
|
||||
results['updated'].append(uid)
|
||||
changed = True
|
||||
|
||||
# Nicht mehr vorhandene Events löschen, wenn gewünscht
|
||||
# Entfernen von Events, wenn aktiviert
|
||||
if module.params['purge']:
|
||||
current_uids = {str(e.uid) for e in ics_events}
|
||||
for uid in set(existing_events.keys()) - current_uids:
|
||||
|
||||
Reference in New Issue
Block a user