feat: basic caldav support (#14372)

fix #13531 

#### PR Dependency Tree


* **PR #14372** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* CalDAV calendar integration: link and sync CalDAV-compatible calendars
(discovery, listing, event sync).
* New UI flow and dialog to link CalDAV accounts with provider
selection, credentials, and display name.

* **API / Config**
* Server exposes CalDAV provider presets in config and new GraphQL
mutation to link CalDAV accounts.
  * New calendar config section for CalDAV with validation and defaults.

* **Tests**
  * Comprehensive CalDAV integration test suite added.

* **Chores**
* Removed analytics tokens from build configuration and reduced Cloud
E2E test shards.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
DarkSky
2026-02-05 03:04:21 +08:00
committed by GitHub
parent 403f16b404
commit a655b79166
34 changed files with 2995 additions and 217 deletions
@@ -2078,6 +2078,32 @@
"com.affine.integration.calendar.new-url-label": "Calendar URL",
"com.affine.integration.calendar.save-error": "An error occurred while saving the calendar settings",
"com.affine.integration.calendar.all-day": "All day",
"com.affine.integration.calendar.account.load-error": "Failed to load calendar accounts",
"com.affine.integration.calendar.provider.load-error": "Failed to load calendar providers",
"com.affine.integration.calendar.auth.start-error": "Failed to start calendar authorization",
"com.affine.integration.calendar.account.unlink-error": "Failed to unlink calendar account",
"com.affine.integration.calendar.account.unlink": "Unlink",
"com.affine.integration.calendar.account.link": "Link",
"com.affine.integration.calendar.account.linked-empty": "No calendar accounts linked yet.",
"com.affine.integration.calendar.account.status.failed": "Authorization failed: {{error}}",
"com.affine.integration.calendar.account.status.failed-reconnect": "Authorization failed. Please reconnect your account.",
"com.affine.integration.calendar.account.count": "{{count}} calendar",
"com.affine.integration.calendar.caldav.link.title": "Link CalDAV account",
"com.affine.integration.calendar.caldav.link.failed": "Failed to link CalDAV account",
"com.affine.integration.calendar.caldav.field.provider": "Provider",
"com.affine.integration.calendar.caldav.field.provider.placeholder": "Select provider",
"com.affine.integration.calendar.caldav.field.provider.error": "Please select a provider.",
"com.affine.integration.calendar.caldav.field.username": "Username",
"com.affine.integration.calendar.caldav.field.username.placeholder": "email@example.com",
"com.affine.integration.calendar.caldav.field.username.error": "Username is required.",
"com.affine.integration.calendar.caldav.field.password": "Password",
"com.affine.integration.calendar.caldav.field.password.placeholder": "Password or app-specific password",
"com.affine.integration.calendar.caldav.field.password.error": "Password is required.",
"com.affine.integration.calendar.caldav.field.displayName": "Display name (optional)",
"com.affine.integration.calendar.caldav.field.displayName.placeholder": "My CalDAV",
"com.affine.integration.calendar.caldav.hint.app-password": "App-specific password required.",
"com.affine.integration.calendar.caldav.hint.learn-more": "Learn more",
"com.affine.integration.calendar.caldav.hint.guide": "Provider setup guide",
"com.affine.integration.calendar.new-doc": "New doc",
"com.affine.integration.calendar.show-events": "Show calendar events",
"com.affine.integration.calendar.show-events-desc": "Enabling this setting allows you to connect your calendar events to your Journal in AFFiNE",