Commit Graph
1362 Commits
Author SHA1 Message Date
Linus Rath 0fb4fc53cf test: cover keeping typed text when a template goes into a reply #911 2026-10-17 19:17:53 +02:00
Linus Rath aa112b3397 fix: sign replies whose From is picked after the composer opens #842 2026-10-17 19:17:53 +02:00
Linus Rath 89ffb7270a fix: stop sending a contact group whose member is not an address #795 2026-10-17 19:17:52 +02:00
Linus Rath bfe95e0ebd fix: keep your own address out of reply-all before your identities have loaded #803 2026-10-17 19:17:51 +02:00
Linus Rath d47f26da20 fix: show invitation times in your time zone #1252 2026-10-17 19:17:49 +02:00
Linus Rath 81ecc9020f fix: open the composer when the mail client can't report directory support 2026-10-17 19:17:44 +02:00
Linus Rath 964626794b feat: browse the company directory in contacts and the composer #1253 2026-10-16 20:46:27 +02:00
Linus Rath 0e61705841 Merge pull request #1244 from lucletoffe/feat/calendar-sort-order
feat(calendar): order calendars by sortOrder and let users reorder them
2026-10-15 23:54:41 +02:00
Linus Rath 12e46bd718 Merge pull request #1245 from lucletoffe/feat/calendar-share-recipients
feat(calendar): say whom a calendar is shared with
2026-10-15 23:54:40 +02:00
Linus Rath 2f10374bab fix: let plugins gate batch forwards and keep each attachment's account #1070 2026-10-15 23:54:39 +02:00
Linus Rath 3db1799fda Merge pull request #1070 from ibayue/feature/batch-forward-as-attachment
feat: forward selected emails as attachments from the context menu
2026-10-15 23:54:38 +02:00
Linus Rath 07e6838d90 fix: stop the mail list skeleton flickering after a reload or account switch 2026-10-15 23:44:06 +02:00
lucletoffeandClaude Opus 5.5 de388a1d12 feat(calendar): order calendars by sortOrder and let users reorder them
Calendars were listed in the order the server returns them, which for
Stalwart is creation order, and the sortOrder property was never read.
Follow the JMAP Calendars rule instead: lower sortOrder first, equal
sortOrder by name (case- and accent-insensitive, numbers by value). The
store keeps the list sorted, so the sidebar, the calendar pickers and the
settings all show the same order; each account's calendars stay together.

Calendar settings gain move up / move down buttons, visible on touch
screens too, and drag and drop for the user's own calendars. A move
renumbers that account's calendars 1, 2, 3... and writes sortOrder only
where it changes. The renumbering also covers the account's calendars the
settings list does not show (iCal subscriptions), so they keep their
place relative to the others. Shared calendars are not offered for
reordering, their order is the owner's.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 22:31:07 +02:00
lucletoffeandClaude Opus 5.5 8cf6783cdb feat(calendar): say whom a calendar is shared with
The sidebar showed the same people icon for any calendar with a share,
labelled "Share calendar", and the settings badge only gave a count, so
there was no way to tell from either who could see the calendar. A share
granted to a service account read like a share with other people.

Both now carry a hint listing the recipients ("Shared with
bot@example.com (Booking robot)"), resolved from the principals the
server lists. Until every recipient is known the hint falls back to the
count. Principals are fetched only when a calendar on screen is shared.

The per-client principal cache of the attendee availability check moves
to lib/jmap/principal-cache.ts so both use it. It no longer keeps an
empty or failed answer: the next caller asks again instead of seeing
no principals for the rest of the session.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 22:19:53 +02:00
Linus Rath dd2104cdda feat: mute notifications for single folders or whole accounts #1169 2026-10-15 21:50:08 +02:00
Linus Rath c349e8e288 fix: keep attachments sendable after the server's upload time limit #1243 2026-10-15 14:56:14 +02:00
Linus Rath a852001d4f feat: let admins turn off the custom From address in the composer 2026-10-15 14:43:07 +02:00
Linus Rath 6ef0d97900 fix: count storage quota against softLimit when the server sets one #1242 2026-10-15 14:31:09 +02:00
daluchenandClaude Code c7cac25b7b fix: resolve the batch forward selection through account-scoped keys
Upstream renamed the store's selection from bare email ids to
account-scoped selectedEmailKeys, and a bare id can name a different
message in another account. Route the batch forward-as-attachment
handler through resolveSelectedEmails like the other batch actions:
it matches keys against the loaded rows and expanded thread members,
and the scheduled view it used to special-case offers no selection.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-15 15:03:43 +08:00
daluchenandClaude Code 5dde5e00e1 feat: add batch forward-as-attachment for selected emails
Multi-select emails in the list, right-click, and pick "Forward as
attachments" to open one composer carrying every selected message as
its own message/rfc822 (.eml) attachment - the batch sibling of the
existing single-message action.

- lib/forward-as-attachment.ts: buildBatchForwardAsAttachmentPayload
  builds one payload from many emails. The subject is count-based
  (there is no single original subject), with the count localized via
  an injected label so the subject never claims more attachments than
  the composer carries. Emails without a blobId are skipped; null when
  none has one, matching the single flow's silent no-op.
- mail-app.tsx: handleBatchForwardAsAttachment resolves the selection
  through useEmailStore.getState() (fresh state, list-ordered
  attachments, stale ids drop out), runs the plugin transform and veto
  hooks per email - one veto cancels the whole compose - and opens the
  composer with the attachments seeded via replyTo. Clears the
  selection only on success.
- email-context-menu.tsx / email-list.tsx: new batch menu item shown
  when the right-clicked email belongs to a multi-selection; hidden in
  the scheduled view like the single item.
- locales: context_menu.forward_as_attachments and
  email_composer.forward_batch_count in all 27 locales.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-15 14:50:31 +08:00
Linus Rath e2e73913b9 Merge branch 'perf/fastest' 2026-10-15 08:38:53 +02:00
Linus Rath 40845b4193 perf: stop measuring the message toolbar again on every open 2026-10-15 06:21:25 +02:00
Linus Rath 8491f7d8db perf: stop loading the editor while the login form renders 2026-10-15 04:44:51 +02:00
Linus Rath a30ae541f9 perf: show the login form without loading the app a second time 2026-10-15 03:27:44 +02:00
Linus Rath c784f1b48b perf: mount no attachment loader for list rows without attachments 2026-10-15 02:59:20 +02:00
Linus Rath d0abf6b494 perf: read the Sent folder for recipient suggestions once, after login settles 2026-10-15 02:57:30 +02:00
Linus Rath d2ad8d5d2f perf: stop re-rendering message rows on folder count updates 2026-10-15 02:29:24 +02:00
Linus Rath 84a53e9ea3 perf: stop re-rendering the folder sidebar when a message opens 2026-10-15 02:20:56 +02:00
Linus Rath 4edaf2663f perf: stop loading the mailboxes and first page twice after login 2026-10-15 02:16:50 +02:00
Linus Rath 59d762a385 perf: start loading a message when the mouse is pressed on it 2026-10-15 01:17:39 +02:00
Linus Rath c161676089 perf: render the reading pane half as often when opening a message 2026-10-15 00:58:45 +02:00
Linus Rath 47762bedf6 perf: re-render only the message rows that changed 2026-10-15 00:41:07 +02:00
Linus Rath 6d6e9d445e perf: measure the message toolbar and body height with fewer layout passes 2026-10-15 00:41:07 +02:00
Linus Rath 9e5f78ab6d perf: show the message header from the list row while its body loads 2026-10-15 00:41:07 +02:00
Linus Rath 06d00e10ee perf: keep the list on screen while a search runs and stop re-rendering on every keystroke 2026-10-15 00:12:59 +02:00
Linus Rath 142ef5daf4 fix: keep text typed under the signature when the signature is swapped or removed 2026-10-15 00:02:13 +02:00
Linus Rath b59e3520f8 perf: stop re-rendering the message rows and mail view on unrelated store changes 2026-10-15 00:00:28 +02:00
Linus Rath cce6ebd324 fix: make the composer's top and bottom bar buttons easier to hit on a phone 2026-10-14 23:55:16 +02:00
Linus Rath 8ea1eef2ff fix: swap the signature when you pick a From address without one 2026-10-14 23:49:34 +02:00
Linus Rath 93c40024d9 fix: show user folders named like system folders with the plain folder icon #1235 2026-10-14 22:57:57 +02:00
Linus Rath 3fac196d3f fix: ask plugins before creating archive folders and marking whole folders read 2026-10-14 20:08:37 +02:00
Linus Rath f8448c6a45 fix: stop reporting calendar, task and contact changes as done when a plugin stopped them 2026-10-14 19:56:06 +02:00
Linus Rath 8204678847 fix: stop reporting mail actions as done when a plugin stopped them 2026-10-14 19:44:54 +02:00
Linus Rath db7a4408a1 fix: list plugin composer buttons under Options when the composer is too narrow for them 2026-10-14 14:59:29 +02:00
Linus Rath c46e37350b fix: keep plugin buttons in the composer's bottom bar from running over Discard 2026-10-14 14:17:25 +02:00
Linus Rath 9d7dc4fc4e fix: stop plugin frames from painting a white backdrop in dark themes 2026-10-14 14:02:40 +02:00
Linus Rath d0f92b4df5 fix: show an attachment's download and menu buttons when the keyboard reaches them 2026-10-14 12:25:06 +02:00
Linus Rath 19967fa3fb feat: let plugins add options to the composer's Options menu as check items 2026-10-14 11:50:52 +02:00
Linus Rath 9d8f762b1d feat: let a plugin title its sidebar section 2026-10-14 11:47:25 +02:00
Linus Rath 5d83d76436 feat: let plugins open a reply to the open message with text to start from 2026-10-14 11:37:51 +02:00