Commit Graph
2378 Commits
Author SHA1 Message Date
Linus Rath c65d18eaae feat: open mail, calendar and contact files from the OS and share into a new draft
The installed app only handled mailto: and webcal: launches. The launch
consumer dropped files, and nothing could hand a File to the composer or
the import dialogs, because the pending mailto is JSON in sessionStorage.

- manifest: `shortcuts` named in the browser's language, `file_handlers`
  for .eml, .ics and .vcf, and `share_target`, all with the base path and
  per-domain branding. Lite's manifest is unchanged.
- `lib/launch-handoff.ts`: the one place files and links wait, in memory
  and in the Cache API, so they survive a sign-in that leaves the page.
  The desktop bridge can call the same functions, since launchQueue never
  fires in Electron. Sign-out clears it.
- launch consumer: routes files by type, and takes a shortcut to an open
  window, which focus-existing would otherwise only focus.
- .eml opens in a new host for the preview, also before sign-in, with the
  strictest device policy deciding about saving. .ics and .vcf open their
  import dialogs through a new `initialFile` prop. A .ics needs the server,
  so offline the dialog says so and carries on once back online.
- composer: `initialFiles` goes through `addFiles`, so plugin vetoes and
  size limits still apply, also from a Pro compose tab.
- `sw.js` takes the share POST before the offline check and keeps the files
  for the page. Without a worker, `/protocol/share` passes text and links
  on and the page says the files are lost. `protocol` joins the app
  sections and the handler pages join the shell, so a mailto: launch
  offline no longer gets a network error.

Browsers without launchQueue or a service worker behave as before.
2026-11-03 05:26:01 +01:00
Linus Rath 03e7cd86f1 fix: print only the open message on Ctrl+P, without plugin panels or the app around it 2026-11-03 03:30:33 +01:00
Linus Rath d82f677b9b fix: stop the admin overview offering an older version as an update 2026-11-03 03:27:33 +01:00
Linus Rath 600bf4fcf3 fix: keep a typed extra label header when the classification page first renders 2026-11-03 02:36:00 +01:00
Linus Rath bf19f21eaf test: give the composing settings test the useLocale the proofreading section needs 2026-11-03 02:35:24 +01:00
Linus Rath e2bc222f49 fix: load the assistant's calendar and settings calls on first use so plugin views don't load the calendar store 2026-11-03 01:54:32 +01:00
Linus Rath 5b4e740ba3 Merge branch 'main' into feat/assistant-everywhere 2026-11-03 01:50:22 +01:00
Linus Rath ddbff7aeb7 Merge the assistant's Files (package D)
# Conflicts:
#	components/email/__tests__/composer-plugin-edit.test.tsx
#	lib/__tests__/plugin-projection.test.ts
2026-11-03 01:48:30 +01:00
Linus Rath 06764d0e0a test: give the composer plugin tests' settings mock the calendar sync bridge 2026-11-03 01:38:42 +01:00
Linus Rath cad10893e3 test: wait for the send confirmation to take focus before pressing Escape 2026-11-03 01:36:12 +01:00
Linus Rath e9e07ddb64 Merge main into feat/assistant-everywhere 2026-11-03 01:35:57 +01:00
Linus Rath 64aad7943f test: give the composer test's settings mock the calendar sync bridge the calendar store registers 2026-11-03 01:31:05 +01:00
Linus Rath d7cb895ebf Merge branch 'feat/assistant-everywhere' into feat/assistant-d
# Conflicts:
#	lib/__tests__/plugin-permission-coverage.test.ts
2026-11-03 01:19:42 +01:00
Linus Rath 55d9c81210 Merge more actions for the assistant (package C) 2026-11-03 01:13:47 +01:00
Linus Rath 6c3e68ce4e Merge branch 'feat/assistant-everywhere' into feat/assistant-d 2026-11-03 01:01:29 +01:00
Linus Rath d68970126e feat: tell plugins when the open message's attachments can't be read from this login 2026-11-03 00:33:59 +01:00
Linus Rath 9ce4d01807 fix: keep the reader still while the list changes, and give Pro tabs no list ticks 2026-11-03 00:30:56 +01:00
Linus Rath e716f529cd test: match template sync and server-state guard to current behaviour 2026-11-03 00:29:56 +01:00
Linus Rath 08bc05a20b Merge branch 'feat/assistant-everywhere' into feat/assistant-b 2026-11-03 00:24:50 +01:00
Linus Rath 267ca40522 Merge branch 'feat/assistant-everywhere' into feat/assistant-c 2026-11-03 00:24:12 +01:00
Linus Rath 12dc2ce3c8 feat: let plugins find, read, attach, save and create files in Files 2026-11-03 00:17:46 +01:00
Linus Rath 6edf7f80a5 fix: let plugins stop an attachment saved to Files, as they can stop an upload 2026-11-03 00:17:45 +01:00
Linus Rath 82dff8035c Merge pull request #1507 from Schrobo/fix/calendar-contact-group-attendees
fix: expand contact groups into calendar attendees
2026-11-03 00:02:05 +01:00
Linus Rath 363c797178 feat: let a plugin dialog fill the window's visible height, so a chat fits above a phone's keyboard 2026-11-02 23:59:57 +01:00
Linus Rath ad36f8d382 fix: show the side panel only where the plugin does, and keep it steady
- The button and the panel of Calendar, Contacts, Files and Settings
  show only when the plugin's shouldShow says yes, so a plugin switched
  off for these views (admin, user or no service) leaves no button that
  opens an empty panel, and no extra rows in Contacts and Settings.
- Files: while the details are open the panel steps aside there only;
  the other views keep it as the user left it. With both stored open the
  details fold when the page loads.
- Resizing stops where the view keeps its 480 px, so a drag or the arrow
  keys no longer fold the panel away (and the handle keeps the focus).
- Settings and Contacts render the same element with or without the
  panel, so a form keeps what was typed when the panel starts docking.
- Contacts on a phone: the panel button sits over an open contact too.
- The panel buttons of the reader and the views have one name, "Plugin
  panel", with aria-pressed, and name the plugin's panel shortcut in
  their title; the open panels are named landmarks.

The reader tests look the button up by its new name and pressed state
(viewer-toolbar-over-side-panel, reader-plugin-surfaces,
viewer-plugin-panel-width), since "Show/Hide plugin panel" is gone.
2026-11-02 23:54:53 +01:00
Linus Rath 8905d31b38 fix: show the admin's locks for plain text and the reply identity on the composing page 2026-11-02 23:14:21 +01:00
Linus Rath 7dd5fe41c3 refactor: answer invitations from one place the reader's banner and plugins share 2026-11-02 23:14:21 +01:00
Szymon Chroboczek a8106d9617 fix: expand contact groups into calendar attendees 2026-11-02 23:10:47 +01:00
Linus Rath 7ab900a0f7 fix: save an edited HTML event description as plain text and keep notes in its format 2026-11-02 22:52:04 +01:00
Linus Rath 798f0ca0c8 fix: show an HTML event description as text instead of its markup 2026-11-02 22:52:04 +01:00
Linus Rath c29a01a133 fix: add a cloud attachment link in the format the message has when the upload finishes 2026-11-02 22:52:04 +01:00
Linus Rath 2ae9e9c2f9 fix: turn quoted lines back into a quote when switching a reply to rich text 2026-11-02 22:52:04 +01:00
Linus Rath dfb946541f fix: keep quote markers, list markers and image alt text when switching a reply to plain text 2026-11-02 22:52:04 +01:00
Linus Rath 4bf676dec1 fix: keep the vacation reply's plain-text part in step with its HTML after a reload 2026-11-02 22:52:03 +01:00
Linus Rath 54c9c2f353 fix: stop the vacation page saving over and over after an HTML reply is saved 2026-11-02 22:52:03 +01:00
Linus Rath 708bc42414 fix: keep line breaks and quoted text when printing a plain-text email 2026-11-02 22:52:03 +01:00
Linus Rath 877aadbb06 fix: reopen drafts from the pro view in the format they were written in 2026-11-02 22:52:03 +01:00
Linus Rath 45a7f2ec6a fix: show an HTML-only signature in the identity list 2026-11-02 22:52:03 +01:00
Linus Rath 0d2fdc44f4 fix: keep angle brackets and ampersands in plain-text templates and placeholder values 2026-11-02 22:52:03 +01:00
Linus Rath 7cf7332255 fix: show one new-version toast however many builds go out while a tab is open 2026-11-02 22:22:31 +01:00
Linus Rath 8139214aea feat: tell the reader panel which messages are ticked in the list 2026-11-02 22:12:01 +01:00
Linus Rath 0e801edcf2 fix: save a rich text draft as an HTML template and edit it in the rich editor #1506 2026-11-02 22:06:02 +01:00
Linus Rath 8fcd647215 feat: let plugins show a side panel next to Calendar, Contacts, Files and Settings 2026-11-02 21:59:36 +01:00
Linus Rath 72117c8a71 Merge branch 'main' into feat/proofreading
# Conflicts:
#	components/admin/admin-shell.tsx
2026-11-02 21:27:17 +01:00
Linus Rath 1d2f19f593 Merge branch 'main' of https://github.com/bulwarkmail/webmail 2026-11-02 21:11:48 +01:00
Linus Rath f0477bc4fd fix: keep the composer's proofreading off the plugin store, and safe with a stand-in editor #1397 2026-11-02 21:08:35 +01:00
Linus Rath bda9e11d37 fix: give the Files details panel the same header height as the other side panels 2026-11-02 21:02:05 +01:00
Linus Rath 6db1f3d373 fix: give the composer's side panels the reader's button and header 2026-11-02 20:59:53 +01:00
Linus Rath c3da79e7d5 fix: keep the assistant panel's button in the same place with no message open 2026-11-02 20:55:26 +01:00
Linus Rath 7e624e9bb0 Merge branch 'feat/boot-skeleton' 2026-11-02 20:28:26 +01:00