Display meeting links in calendar event output

Conference/meeting links (Google Meet, Zoom, etc.) were fetched from the
API but never included in get_events() output. Extract video entry point
from conferenceData (with hangoutLink fallback) and display it in all
three output modes: single detailed, multi detailed, and basic list.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Rein Lemmens
2026-03-12 21:08:16 +01:00
parent 38ad39bea6
commit e441ade35f

View File

@@ -172,6 +172,21 @@ def _preserve_existing_fields(
event_body[field_name] = new_value event_body[field_name] = new_value
def _get_meeting_link(item: Dict[str, Any]) -> str:
"""Extract video meeting link from event conference data or hangoutLink."""
conference_data = item.get("conferenceData")
if conference_data and "entryPoints" in conference_data:
for entry_point in conference_data["entryPoints"]:
if entry_point.get("entryPointType") == "video":
uri = entry_point.get("uri", "")
if uri:
return uri
hangout_link = item.get("hangoutLink", "")
if hangout_link:
return hangout_link
return ""
def _format_attendee_details( def _format_attendee_details(
attendees: List[Dict[str, Any]], indent: str = " " attendees: List[Dict[str, Any]], indent: str = " "
) -> str: ) -> str:
@@ -448,6 +463,8 @@ async def get_events(
) )
attendee_details_str = _format_attendee_details(attendees, indent=" ") attendee_details_str = _format_attendee_details(attendees, indent=" ")
meeting_link = _get_meeting_link(item)
event_details = ( event_details = (
f"Event Details:\n" f"Event Details:\n"
f"- Title: {summary}\n" f"- Title: {summary}\n"
@@ -456,6 +473,10 @@ async def get_events(
f"- Description: {description}\n" f"- Description: {description}\n"
f"- Location: {location}\n" f"- Location: {location}\n"
f"- Color ID: {color_id}\n" f"- Color ID: {color_id}\n"
)
if meeting_link:
event_details += f"- Meeting Link: {meeting_link}\n"
event_details += (
f"- Attendees: {attendee_emails}\n" f"- Attendees: {attendee_emails}\n"
f"- Attendee Details: {attendee_details_str}\n" f"- Attendee Details: {attendee_details_str}\n"
) )
@@ -494,10 +515,16 @@ async def get_events(
) )
attendee_details_str = _format_attendee_details(attendees, indent=" ") attendee_details_str = _format_attendee_details(attendees, indent=" ")
meeting_link = _get_meeting_link(item)
event_detail_parts = ( event_detail_parts = (
f'- "{summary}" (Starts: {start_time}, Ends: {end_time})\n' f'- "{summary}" (Starts: {start_time}, Ends: {end_time})\n'
f" Description: {description}\n" f" Description: {description}\n"
f" Location: {location}\n" f" Location: {location}\n"
)
if meeting_link:
event_detail_parts += f" Meeting Link: {meeting_link}\n"
event_detail_parts += (
f" Attendees: {attendee_emails}\n" f" Attendees: {attendee_emails}\n"
f" Attendee Details: {attendee_details_str}\n" f" Attendee Details: {attendee_details_str}\n"
) )
@@ -513,9 +540,12 @@ async def get_events(
event_details_list.append(event_detail_parts) event_details_list.append(event_detail_parts)
else: else:
# Basic output format # Basic output format
event_details_list.append( meeting_link = _get_meeting_link(item)
f'- "{summary}" (Starts: {start_time}, Ends: {end_time}) ID: {item_event_id} | Link: {link}' basic_line = f'- "{summary}" (Starts: {start_time}, Ends: {end_time})'
) if meeting_link:
basic_line += f" Meeting: {meeting_link}"
basic_line += f" ID: {item_event_id} | Link: {link}"
event_details_list.append(basic_line)
if event_id: if event_id:
# Single event basic output # Single event basic output