From 92db7c845ba2a84c6e03c44fc003dc20100bd8ed Mon Sep 17 00:00:00 2001 From: silentoplayz Date: Tue, 9 Jun 2026 11:04:31 -0400 Subject: [PATCH] fix(calendar): anchor recurring event expansion to event start date The expand_recurring_event() utility used the view range start as dtstart, causing FREQ=WEEKLY events to land on the wrong day of the week. Use the event's original start date instead so recurrence patterns stay correct. --- backend/open_webui/utils/calendar.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/backend/open_webui/utils/calendar.py b/backend/open_webui/utils/calendar.py index 9484c58dc0..e3feb972f0 100644 --- a/backend/open_webui/utils/calendar.py +++ b/backend/open_webui/utils/calendar.py @@ -36,14 +36,16 @@ def expand_recurring_event( range_end_dt = datetime.fromtimestamp(range_end_ns / 1_000_000_000) scan_start = range_start_dt - timedelta(days=1) + original_start_ns = event_dict['start_at'] + original_start_dt = datetime.fromtimestamp(original_start_ns / 1_000_000_000) + try: - # Parse with dtstart near the range so we never iterate from epoch - rule = rrulestr(rrule_str, dtstart=scan_start, ignoretz=True) + # Anchor to the event's real start so day-of-week / day-of-month are correct + rule = rrulestr(rrule_str, dtstart=original_start_dt, ignoretz=True) except Exception: log.warning(f'Failed to parse RRULE for event {event_dict.get("id")}: {rrule_str}') return [event_dict] - original_start_ns = event_dict['start_at'] original_end_ns = event_dict.get('end_at') duration_ns = (original_end_ns - original_start_ns) if original_end_ns else None