ungana

Unnamed repository; edit this file 'description' to name the repository.
Info | Log | Files | Refs | README

commit af746edb2bb11b1e04655deb81db959c7ade6146
parent 60e07ddfcee827034808ac0b08f4340edd8f740f
Author: Carlosokumu <carlosokumu254@gmail.com>
Date:   Mon, 18 Aug 2025 18:22:46 +0300

ensure ical field DTSTART  stores two entries : one with tzid and withoout tzid

Diffstat:
Mcalendarapp/ical/ical_manager.py | 57+++++++++++++++++++++++++++++++++------------------------
1 file changed, 33 insertions(+), 24 deletions(-)

diff --git a/calendarapp/ical/ical_manager.py b/calendarapp/ical/ical_manager.py @@ -1,6 +1,6 @@ import os from icalendar import Calendar, Event, vDuration -from datetime import datetime +from datetime import datetime, timedelta, timezone from typing import Dict, Any class ICalManager: @@ -13,25 +13,36 @@ class ICalManager: def create_event(self, event_data: Dict[str, Any]) -> Event: event = Event() - - event.add('dtstart', event_data['start']) + + start_dt = event_data['start'] + tzid = event_data.get('tzid') + + event.add('dtstart', start_dt.astimezone(timezone.utc)) + + if tzid: + event.add('dtstart', start_dt) + event['dtstart'][-1].params['TZID'] = tzid + else: + event.add('dtstart', start_dt) + event.add('summary', event_data['summary']) event.add('location', event_data['location']) event.add('description', event_data['description']) event.add('organizer', event_data['organizer']) - - if 'end' in event_data: - event.add('dtend', event_data['end']) - + + if 'duration' in event_data: + if isinstance(event_data['duration'], str): + event.add('duration', self._parse_duration(event_data['duration'])) + else: + event.add('duration', event_data['duration']) + if 'uid' in event_data: event.add('uid', event_data['uid']) else: - event.add('uid', self._generate_uid(event_data['start'])) - - if 'tzid' in event_data: - event['dtstart'].params['TZID'] = event_data['tzid'] - + event.add('uid', self._generate_uid(start_dt)) + return event + def update_event(self, cal: Calendar, updates: Dict[str, Any],filename: str = None) -> Calendar: uid = cal.walk('VEVENT')[0].get('uid') @@ -51,19 +62,17 @@ class ICalManager: return cal + def _parse_duration(self, duration_str: str): + hours, minutes = 0, 0 + if "h" in duration_str: + parts = duration_str.split("h") + hours = int(parts[0]) + if "m" in parts[1]: + minutes = int(parts[1].replace("m", "")) + elif "m" in duration_str: + minutes = int(duration_str.replace("m", "")) - def _parse_duration(self, duration_str: str) -> tuple[int, int]: - """Parse duration string in format 'XhYm' into hours and minutes.""" - hours = 0 - minutes = 0 - - if 'h' in duration_str: - hours = int(duration_str.split('h')[0]) - if 'm' in duration_str: - minutes_part = duration_str.split('h')[-1] if 'h' in duration_str else duration_str - minutes = int(minutes_part.split('m')[0]) - - return hours, minutes + return timedelta(hours=hours, minutes=minutes) def _generate_uid(self, dtstart: datetime) -> str: """Generate a unique ID based on event start time."""