import datetime import icalendar from ..data import HIDDEN_LABEL_PREFIX, RealizedWorkSample ZERO_DURATION = datetime.timedelta(seconds=0) HOUR = datetime.timedelta(hours=1) MINUTE = datetime.timedelta(minutes=1) def create_title(sample: RealizedWorkSample) -> tuple[str,str]: ls = [] desc = [] for label_and_type in sample.labels: if label_and_type.startswith(HIDDEN_LABEL_PREFIX): continue if label_and_type.startswith('author:'): continue if len(ls) == 0: ls.append(label_and_type.split(':')[1]) else: desc.append(label_and_type) return ' '.join(ls), '\n'.join(desc) def generate_calendar( samples: list[RealizedWorkSample], ) -> icalendar.Calendar: max_title_parts = 2 cal = icalendar.Calendar() cal.add('prodid', '-//personal_data_calendar//example.org//') cal.add('version', '2.0') for sample in samples: title, description = create_title(sample) # Create event event = icalendar.Event() event.add('summary', title) event.add('description', description) event.add('dtstart', sample.start_at) event.add('dtend', sample.end_at) for label_and_type in sample.labels: if label_and_type.startswith('author:'): event.add( 'organizer', 'mailto:' + label_and_type.removeprefix('author:'), ) cal.add_component(event) del event return cal def generate_icalendar_file( samples: list[RealizedWorkSample], file: str, ) -> None: calendar = generate_calendar(samples) with open(file, 'wb') as f: f.write(calendar.to_ical())