Surface calendar view preferences and complete VEVENT recurrence editing #4

Open
opened 2026-07-07 11:53:34 +02:00 by zemion · 1 comment
Owner

Goal

Expose the currently code-level calendar view preferences through the Settings/UI preferences model, and complete user-facing VEVENT/recurrence editing.

Context

The calendar WebUI now has internal defaults/localStorage support for:

  • dimming weekends in week view
  • dimming off-hours, currently defaulting to 06:00-20:00 work time
  • continuous view virtualization/overscan
  • continuous-view alternating month shading

These are intentionally not surfaced in UI yet because core does not have a persisted module-extensible UI preferences panel.

Scope

  • Add a durable settings/preferences path for calendar view defaults and per-user overrides.
  • Surface calendar preferences in the Settings UI once the module settings extension point exists.
  • Add recurrence editing UI for RRULE/RDATE/EXDATE and define how recurrence instances are expanded in views.
  • Expose additional important VEVENT fields in the event editor where appropriate: status, transparency, classification, organizer, attendees, categories, reminders, attachments, related-to, timezone.
  • Preserve unknown iCalendar properties during edits/import/export.

Acceptance Criteria

  • Calendar preferences can be changed without editing localStorage or source constants.
  • Preferences survive reloads and apply consistently across continuous/month/week/workweek/day views.
  • Repeating events can be created, edited, displayed, and moved with clear series-vs-instance behavior.
  • Unsupported/unknown VEVENT data is not silently discarded.
## Goal Expose the currently code-level calendar view preferences through the Settings/UI preferences model, and complete user-facing VEVENT/recurrence editing. ## Context The calendar WebUI now has internal defaults/localStorage support for: - dimming weekends in week view - dimming off-hours, currently defaulting to 06:00-20:00 work time - continuous view virtualization/overscan - continuous-view alternating month shading These are intentionally not surfaced in UI yet because core does not have a persisted module-extensible UI preferences panel. ## Scope - Add a durable settings/preferences path for calendar view defaults and per-user overrides. - Surface calendar preferences in the Settings UI once the module settings extension point exists. - Add recurrence editing UI for RRULE/RDATE/EXDATE and define how recurrence instances are expanded in views. - Expose additional important VEVENT fields in the event editor where appropriate: status, transparency, classification, organizer, attendees, categories, reminders, attachments, related-to, timezone. - Preserve unknown iCalendar properties during edits/import/export. ## Acceptance Criteria - Calendar preferences can be changed without editing localStorage or source constants. - Preferences survive reloads and apply consistently across continuous/month/week/workweek/day views. - Repeating events can be created, edited, displayed, and moved with clear series-vs-instance behavior. - Unsupported/unknown VEVENT data is not silently discarded. <!-- codex-manual-fingerprint:calendar-preferences-vevent-recurrence -->
Author
Owner

Codex State: progress

Summary

  • Replaced the hand-written VEVENT parser/exporter with the icalendar library while preserving unknown properties, parameters, VALARM data, and common unmapped standard properties in event.icalendar.
  • Mapped TZID-aware DTSTART/DTEND/DURATION into UTC storage fields while keeping the source timezone and readable text fields.
  • Added a backend recurrence expansion primitive for RRULE/RDATE/EXDATE; UI recurrence editing and CalDAV/free-busy exposure remain open follow-up work.
  • Changed normal event updates to invalidate stale raw_ics so edited imported events export generated ICS from current fields.

Changed Files

  • pyproject.toml
  • src/govoplan_calendar/backend/ical.py
  • src/govoplan_calendar/backend/service.py
  • tests/test_ical.py

Verification

  • PYTHONPATH=/mnt/DATA/git/govoplan-calendar/src:/mnt/DATA/git/govoplan-tenancy/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-core/src /mnt/DATA/git/govoplan-core/.venv/bin/python -m unittest discover -s /mnt/DATA/git/govoplan-calendar/tests
  • PYTHONPATH=/mnt/DATA/git/govoplan-calendar/src:/mnt/DATA/git/govoplan-tenancy/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-core/src /mnt/DATA/git/govoplan-core/.venv/bin/python -m compileall -q /mnt/DATA/git/govoplan-calendar/src/govoplan_calendar /mnt/DATA/git/govoplan-calendar/tests
  • cd /mnt/DATA/git/govoplan-core && ./.venv/bin/python -m govoplan_core.devserver --smoke --no-reload

Next / Blocked

  • Surface recurrence editing/exception handling in the calendar UI and API.
  • Expose recurrence-expanded listing/free-busy endpoints before CalDAV protocol work.

Suggested status label: status/in-progress

## Codex State: progress ### Summary - Replaced the hand-written VEVENT parser/exporter with the icalendar library while preserving unknown properties, parameters, VALARM data, and common unmapped standard properties in event.icalendar. - Mapped TZID-aware DTSTART/DTEND/DURATION into UTC storage fields while keeping the source timezone and readable text fields. - Added a backend recurrence expansion primitive for RRULE/RDATE/EXDATE; UI recurrence editing and CalDAV/free-busy exposure remain open follow-up work. - Changed normal event updates to invalidate stale raw_ics so edited imported events export generated ICS from current fields. ### Changed Files - `pyproject.toml` - `src/govoplan_calendar/backend/ical.py` - `src/govoplan_calendar/backend/service.py` - `tests/test_ical.py` ### Verification - `PYTHONPATH=/mnt/DATA/git/govoplan-calendar/src:/mnt/DATA/git/govoplan-tenancy/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-core/src /mnt/DATA/git/govoplan-core/.venv/bin/python -m unittest discover -s /mnt/DATA/git/govoplan-calendar/tests` - `PYTHONPATH=/mnt/DATA/git/govoplan-calendar/src:/mnt/DATA/git/govoplan-tenancy/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-core/src /mnt/DATA/git/govoplan-core/.venv/bin/python -m compileall -q /mnt/DATA/git/govoplan-calendar/src/govoplan_calendar /mnt/DATA/git/govoplan-calendar/tests` - `cd /mnt/DATA/git/govoplan-core && ./.venv/bin/python -m govoplan_core.devserver --smoke --no-reload` ### Next / Blocked - Surface recurrence editing/exception handling in the calendar UI and API. - Expose recurrence-expanded listing/free-busy endpoints before CalDAV protocol work. Suggested status label: `status/in-progress`
zemion added the
type
feature
priority
p2
status
triage
module/calendar
codex/ready
labels 2026-07-07 22:44:24 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: add-ideas/govoplan-calendar#4
No description provided.