| Calendars |
The calendar list, read in full at most once per backstop interval, since some of its changes never show in incremental reads |
Every calendar plus every calendar group's calendars, listed on the first pass and on polls; a new calendar arrives with the next listing; calendars of another mailbox are not synced |
Discovered from a provider table (iCloud, Fastmail, Yahoo, GMX, Zoho, mailbox.org, Posteo), .well-known or DNS SRV records |
| Push |
One watch channel per calendar the account owns or can write, plus one on the calendar list, renewed about a day before it expires |
One Graph change notification subscription per account on its events |
None; every API write syncs at once |
| Backstop poll |
Once a day with push channels, hourly without; reader and free/busy calendars rely on it |
Every 10 minutes with push, every minute without |
Every 15 minutes |
| Change detection |
Incremental lists with a sync token, series included; requests are frugal because Google counts them against a daily quota |
One calendarView delta per calendar; series rules read from the series master |
sync-collection where offered, else ctag and etag comparison; changed objects read 50 at a time |
| Window |
Series expanded locally; the window rolls daily without a request |
Anchored to the first of the current UTC month and reaching about a month past the future window; re-read in full when the month turns, announcing only real changes |
Series expanded locally in the start's zone, keeping wall-clock times across daylight saving changes |
| Recurrence writes |
RFC 5545 lines; one occurrence is resolved right before a write to it |
One RRULE that Outlook has a pattern for; RDATE, EXDATE, EXRULE, several rules and finer frequencies are refused |
RRULE, RDATE and EXDATE lines on the series' iCalendar object; overrides are its exceptions |
| Invitations |
Sent by Google; notify chooses whether attendees hear |
Always sent for a meeting the account organizes; a delete can carry a comment |
Sent by the server where it schedules (RFC 6638); otherwise mailed from the account's SMTP server for meetings it organizes |
| Free/busy |
One freeBusy.query for every attendee |
One getSchedule request for every attendee |
One VFREEBUSY request where the server schedules; otherwise the account's own calendars only |
| Online meetings |
Meet; another link becomes an add-on conference |
Teams; another link becomes the location's link, with a join line in the body |
No provider links; another link is the CONFERENCE property |