Skip to content

Calendar picker lists only the first page of calendars (Microsoft 100, Google 250) #59

Closed

Description

@distronode-com

Before submitting

  • I've searched existing issues and this isn't a duplicate.
  • This is a reproducible bug in Calnode, not a configuration/setup question or a feature request.

What's the bug?

The calendar picker lists only the first page of an account's calendars, so calendars beyond it cannot be checked for conflicts or chosen as the destination:

  • Microsoft: internal/calendar/microsoft/calendars.go requests /me/calendars?...&$top=100 once and never follows @odata.nextLink. freebusy.go already decodes @odata.nextLink, so the pattern exists in the package.
  • Google: internal/gcal/calendars.go requests calendarList?maxResults=250 once and never follows nextPageToken.

Nothing signals the truncation: the list simply ends. Accounts with many shared calendars (resource rooms in Microsoft 365, subscribed calendars in Google Workspace) reach these limits.

Steps to reproduce

  1. Connect a Microsoft account that has more than 100 calendars (or a Google account subscribed to more than 250).
  2. Open the calendar picker. Only the first 100 (or 250) appear.

Calnode version / commit

main at 8c3cb5d.

How are you running Calnode?

Found by reading the code on main: the page sizes are in the request URLs.

Logs, screenshots, or anything else

Fix direction: loop on @odata.nextLink / nextPageToken with a sane upper bound, and cover it with a fake server that returns two pages.

Activity

  1. pullfrog commented on Sep 17, 2026

    @pullfrog
    Contributor
  2. shockalotti commented on Sep 17, 2026

    @shockalotti
    Contributor

    Good catch - silent truncation is the worst kind. Looping @odata.nextLink / nextPageToken with a cap plus the two-page fake-server test is exactly right. Taking this one first.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions