diff --git a/csv-to-ics.py b/csv-to-ics.py index 9ac8a35..700e9e0 100644 --- a/csv-to-ics.py +++ b/csv-to-ics.py @@ -1,15 +1,34 @@ import csv import os +import uuid +import json from ics import Calendar, Event from datetime import datetime import pytz +UID_STORE_FILE = "event_uids.json" + +def load_uids(): + """Load the UID mappings from a JSON file.""" + if os.path.exists(UID_STORE_FILE): + with open(UID_STORE_FILE, "r") as file: + return json.load(file) + return {} + +def save_uids(uids): + """Save the UID mappings to a JSON file.""" + with open(UID_STORE_FILE, "w") as file: + json.dump(uids, file) + def generate_ical_from_csv(csv_file): + # Load existing UIDs + uids = load_uids() + # Generate the output .ics file name ical_file = os.path.splitext(csv_file)[0] + '.ics' # Define CET time zone - cet = pytz.timezone('Europe/Berlin') # CET is commonly represented by Berlin + cet = pytz.timezone('Europe/Berlin') # Create a new calendar calendar = Calendar() @@ -27,29 +46,31 @@ def generate_ical_from_csv(csv_file): start_time = row['start time'].strip() # Expected format: HH:MM end_time = row['end time'].strip() # Expected format: HH:MM location = row['Location'] - # Combine date and time using the updated date format and apply CET start_datetime = cet.localize(datetime.strptime(f"{date} {start_time}", "%d.%m.%Y %H:%M")) end_datetime = cet.localize(datetime.strptime(f"{date} {end_time}", "%d.%m.%Y %H:%M")) - uid = f"{date}{start_time}@lak2024.leben-in-gross-doelln.de" + # Create a unique key for the event + event_key = f"{description}_{date}_{start_time}_{location}" + # Retrieve or generate a UID + uid = uids.get(event_key, str(uuid.uuid4())) + uids[event_key] = uid # Create a new event event = Event() - event.created = cet.localize(datetime.now()) - event.uid = uid - event.name = f"{description} (Gastgeber: {host})" # Include the host in the event name + event.name = f"{description} (Gastgeber: {host})" event.begin = start_datetime event.end = end_datetime event.location = location - + event.uid = uid # Set the unique identifier + event.last_modified = datetime.now() # Timestamp for updates # Add the event to the calendar calendar.events.add(event) - except Exception as e: print(f"Error processing row: {row}. Error: {e}") - # Write the calendar to an iCal file with open(ical_file, mode='w', encoding='utf-8') as file: file.writelines(calendar) + # Save UIDs for future use + save_uids(uids) print(f"iCal file created: {ical_file}")