diff --git a/backend/src/appointment/controller/apis/google_client.py b/backend/src/appointment/controller/apis/google_client.py index 7de67e2c..9ee2c9e1 100644 --- a/backend/src/appointment/controller/apis/google_client.py +++ b/backend/src/appointment/controller/apis/google_client.py @@ -109,6 +109,7 @@ def list_events(self, calendar_id, time_min, time_max, token): 'items/attendees', 'items/start', 'items/end', + 'items/transparency', # Top level stuff 'nextPageToken', ) diff --git a/backend/src/appointment/controller/calendar.py b/backend/src/appointment/controller/calendar.py index 503b5574..6bdfcc2f 100644 --- a/backend/src/appointment/controller/calendar.py +++ b/backend/src/appointment/controller/calendar.py @@ -177,10 +177,12 @@ def list_events(self, start, end): events = [] for event in remote_events: + # If the event doesn't have transparency assume its opaque (and thus blocks time) by default. + transparency = event.get('transparency', 'opaque').lower() status = event.get('status').lower() - # Ignore cancelled events - if status == 'cancelled': + # Ignore cancelled events or non-time blocking events + if status == 'cancelled' or transparency == 'transparent': continue # Mark tentative events @@ -333,10 +335,11 @@ def list_events(self, start, end): expand=True, ) for e in result: + transparency = e.icalendar_component['transp'].lower() if 'transp' in e.icalendar_component else 'opaque' status = e.icalendar_component['status'].lower() if 'status' in e.icalendar_component else '' # Ignore cancelled events - if status == 'cancelled': + if status == 'cancelled' or transparency == 'transparent': continue # Mark tentative events