fix(dav): keep a cancelled occurrence cancelled for attendees#60658
fix(dav): keep a cancelled occurrence cancelled for attendees#60658ndo84bw wants to merge 1 commit into
Conversation
|
Thanks for the contribution Mind restoring the pull request template and filling it out? Thanks |
🤦♂️ Restored and filled out the template, thanks! |
|
Hi @ndo84bw Thanks for the PR, I will test this when I have a min |
|
Hello there, We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process. Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6 Thank you for contributing to Nextcloud and we hope to hear from you soon! (If you believe you should not receive this message, you can add yourself to the blocklist.) |
05a46d2 to
c3067b2
Compare
c3067b2 to
be907d7
Compare
… it cancelled When an organizer cancels a single occurrence of a recurring event, the broker emits a per-instance CANCEL plus a REQUEST for the attendee's remaining instances. The REQUEST omitted the cancelled instance, but processMessageRequest replaces all components of the attendee's stored object, so it dropped the CANCELLED override the CANCEL had just added and the occurrence reappeared as a normal event on the attendee's calendar. Keep the cancelled instance in the REQUEST so the override survives the component replace. Two adjustments keep the pipeline coherent with the kept override: - IMipPlugin no longer builds an email from a newly cancelled override, which sent a second "Invitation:" email (with response buttons) for the occurrence the CANCEL email had just cancelled. Cancelling a previously modified occurrence produces no CANCEL message, so that override keeps its REQUEST email. - TipBroker derives the attendee-side event status from the master instance; the aggregate status (last component wins) would treat the attendee copy as a cancelled event once it carries the override, muting all attendee replies. Assisted-by: ClaudeCode:claude-opus-4-7 Assisted-by: ClaudeCode:claude-fable-5 Signed-off-by: Nico Donath <ndo84bw@gmx.de>
be907d7 to
3d8bfef
Compare
Summary
When the organizer cancels a single occurrence of a recurring event, the attendee receives a "Cancelled" email, but the occurrence still shows up as not cancelled in the attendee's calendar. Both users are on the same Nextcloud instance. (tested on master)
The TipBroker first sends the CANCEL and then follows up with a REQUEST that does not include the cancelled instance. This overwrites the cancellation for that instance: Sabre's processMessageRequest replaces the attendee's entire stored object with the components of the REQUEST.
The patch:
Note:
STATUS:CANCELLEDoverride inside a REQUEST is not foreseen by RFC 5546 3.2.2 (STATUS there:TENTATIVE/CONFIRMED); external clients still receive the unchanged, RFC-conformant per-instance CANCEL as the authoritative signal.Tested:
Checklist
3. to review, feature component)stable32)AI (if applicable)