Skip to content

Preserve custom CalDAV / iCalendar properties when events are updated (partial/delta update instead of full overwrite) #7764

@usselite

Description

@usselite

Is your feature request related to a problem? Please describe.

We’re using Nextcloud Calendar as a CalDAV server and store custom iCalendar properties on events (e.g. X-SENDENTCALENDAR-ID, X-SENDENT-METADATA, or similar).

Current behavior:

  1. Client A creates an event and invites Client B
  2. Client B accepts the invitation, sets custom properties in event
  3. Client A modifies their entry, e.g. other event date, which pushes update towards Client B. As soon update is accepted by Client B, custom properties are gone.

It seems to be the case that any customizations Client B made (in this case custom properties), are always fully overwritten by the event details pushed by Client A.

The proposed solution would entail the retaining of custom properties when such event is updated once more.


Related but more difficult:
The above scenario also applies to regular modifications that client B would make, for example: reminders are overwritten, the status (busy/available) is overwritten. The UI allows client B to modify the event of client A to suit client B their own needs. The behavior is unexpected as soon client A invites client B, client B further 'tailors' the event to their needs, client A pushes an update and client B then loses their modifications.

Describe the solution you'd like

When an event is updated via CalDAV, custom / unknown properties of the VEVENT should be preserved, as long as the updating client did not explicitly remove them.

The server should perform something akin to a delta / partial update:

  • Only change the properties that were actually modified (e.g. SUMMARY, DTSTART, DTEND, etc.)
  • Keep existing X-... properties and other unknown properties intact.

Describe alternatives you've considered

None.

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    0. to triagePending approval or rejectionenhancementNew feature request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions