Skip to content

feat(calendar): open event meeting links from the events card - #3786

Open
floydya wants to merge 1 commit into
noctalia-dev:mainfrom
floydya:feat/calendar-event-links
Open

feat(calendar): open event meeting links from the events card#3786
floydya wants to merge 1 commit into
noctalia-dev:mainfrom
floydya:feat/calendar-event-links

Conversation

@floydya

@floydya floydya commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Resolve a clickable meeting link for calendar events and make linked events open in the browser from the control center events card.

Motivation

Meeting URLs already arrive with every sync - Google and Outlook write them into LOCATION, but LOCATION was stored and never displayed, and the URL property was not parsed at all. Joining a meeting meant leaving the shell and finding the event in a browser.

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Refactoring
  • Build / packaging

Related Issue

None

Testing

  • tests/event_link_test.cpp (new, registered in meson.build): 24 cases covering bare/embedded links, trailing punctuation and wrappers, LOCATION-over-URL precedence, scheme rejection (file:, data:, webcal:, mailto:), control characters, length cap, and token-boundary matching.
  • tests/ical_parser_test.cpp: three VEVENT fixtures - LOCATION link wins over URL, URL fallback, and no link.
  • Both test binaries built and run: pass.
  • just format (clang-format v22).
  • Manual: verified in a live session - links resolve from CalDAV LOCATION, the marker renders on the time line, and clicking opens the browser.

Manual Coverage

  • Tested on Niri
  • Tested on Hyprland
  • Tested on Sway
  • Tested on another compositor:
  • Tested with different bar positions and density settings
  • Tested at different interface scaling values
  • Tested with multiple monitors

Screenshots / Videos

screenshot_20260803_221923-region screenshot_20260803_221917-region screenshot_20260803_221907-region

Checklist

  • This PR is ready for review, or it is marked as Draft.
  • I read and followed the relevant guidance in CONTRIBUTING.md.
  • I ran just format with clang-format v22+ installed, or this PR has no code changes.
  • I ran the relevant build or test commands, or explained why they were not run.
  • I self-reviewed the changes.
  • I checked for new warnings or errors.
  • I will update end-user documentation after merge, or this PR does not change user-facing configuration or behavior.
  • I added or updated assets/translations/en.json, or this PR adds no new user-facing strings.
  • I did not edit non-English translation files unless this PR is explicitly for translation tooling, an import/export sync, or a maintainer-requested locale change.
  • I used the existing canonical names for config keys, IPC names, paths, and identifiers.

Additional Notes

  • No config option: rows without a link render exactly as before, so there is nothing to opt out of.
  • DESCRIPTION is not scanned. It carries dial-in numbers, unsubscribe links and HTML, so picking "the" link from it would surface wrong targets. Can be added if real calendars need it.
  • conferenceData.entryPoints[] is not walked; hangoutLink covers Google Meet today.
  • Cold-cache edge case: a Google event whose link came only from hangoutLink with an empty LOCATION has nothing to backfill from and becomes clickable after the next sync.

@floydya
floydya marked this pull request as draft August 3, 2026 20:53
@floydya
floydya force-pushed the feat/calendar-event-links branch from e256c68 to ca0d220 Compare August 4, 2026 05:46
@floydya
floydya force-pushed the feat/calendar-event-links branch from ca0d220 to 1232e2e Compare August 4, 2026 06:57
@floydya
floydya marked this pull request as ready for review August 4, 2026 07:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant