nextcloud / nextcloud/calendar

Proposal blocker events only consider DTSTART; RDATE occurrences are ignored, causing only the first proposed date to be treated as blocked

Open
#8,095 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

0. to triage bug
Dominant language
JavaScript
Stars
1.2k
Forks
332
Avg merge
16h 13m
Merged PRs (30d)
137

Description

After a night of debugging finnally found the root cause with Ai

When creating a meeting proposal with multiple proposed dates, the backend correctly generates a single VEVENT containing all dates via RDATE entries. These appear properly in the calendar UI as multiple tentative occurrences.

However, the blocker‑detection logic only evaluates the event’s DTSTART value and ignores all additional dates stored in RDATE. As a result:

Only the first proposed date is treated as a calendar blocker.

Subsequent proposals do not detect conflicts with the other proposed dates.

The frontend receives only one “blocked” date and displays only that one.

Availability checks and proposal views behave as if the proposal had only a single date.

The blocker event itself is correct — the issue is that the code reading blocker events does not parse RDATE values.

Expected behavior:
All proposed dates (DTSTART + RDATEs) should be treated as individual blocked times when evaluating availability or rendering proposal conflicts.

Actual behavior:
Only the first date (DTSTART) is considered blocked; all RDATE occurrences are ignored.

Root cause:
Blocker‑reading logic uses only DTSTART and does not iterate over RDATE entries.

Fix direction:
Extend blocker detection to extract all occurrences from VEVENTs by reading both DTSTART and all RDATE values.

=> Will try to make a proposal

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the blocker-reading logic used by availability checks and proposal conflict rendering, then trace how VEVENT data is converted into blocked times. Verify that DTSTART and every RDATE occurrence are included, and confirm that all proposed dates appear as blocked in the availability and proposal views.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
backend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.