Commit Graph
1145 Commits
Author SHA1 Message Date
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 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 0b49d01a76 fix: keep synced calendar subscriptions from stale devices and past deletions #1064 2026-10-15 23:54:37 +02:00
Linus Rath fe40567398 Merge pull request #1064 from sanitz/feat/sync-ical-subscriptions
feat(calendar): sync iCal subscriptions via encrypted settings store
2026-10-15 23:54:37 +02:00
Linus Rath 7eb0835834 fix: check every calendar for events within the server's request limits #1065 2026-10-15 23:54:36 +02:00
Linus Rath 2f06ef45f5 Merge pull request #1065 from sanitz/fix/tasks-only-calendar-detection
fix(calendar): detect tasks-only calendars per-calendar instead of scanning whole account
2026-10-15 23:54:35 +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 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
Linus Rath d693fbc7c2 fix: leave the all mailbox out of the cross views #1241 2026-10-15 14:25:32 +02:00
Linus Rath 24bd1f8e44 fix: only offer contacts, filters, calendars and files for shared accounts that support them #1239 2026-10-15 14:22:54 +02:00
Linus Rath b1360b8588 fix: leave blank signatures out when creating an identity #1240 2026-10-15 14:18:06 +02:00
Linus Rath 6f5d20454c fix: stop the message list reordering and repainting when switching accounts 2026-10-15 14:15:20 +02: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 18633b72ba test: type the fetch mock in the large HTML body test 2026-10-15 06:15:57 +02:00
Linus Rath 3a0c988419 perf: skip the verification-code scan of HTML mail that names no code 2026-10-15 06:15:15 +02:00
Linus Rath 15c3acd779 perf: open large HTML messages with one request instead of two 2026-10-15 06:05:22 +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 a0563c1fed perf: reopen a visited folder without re-reading or redrawing its list 2026-10-15 01:03:02 +02:00
Linus Rath bccad4dddf perf: reuse date formatters in the message list 2026-10-15 00:41:08 +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 db2c0aff3d perf: load conversation sizes with the folder page instead of in a second request 2026-10-15 00:14:57 +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 2d67442a2b perf: list search results without waiting for the highlighted excerpts 2026-10-14 23:51:17 +02:00
Linus Rath 15edc5943b feat: check the extension directory's signature before installing from the marketplace 2026-10-14 21:36:50 +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 8204678847 fix: stop reporting mail actions as done when a plugin stopped them 2026-10-14 19:44:54 +02:00
Linus Rath bcd044f4fc fix: stop translating the composer as a music composer and the certificate subject as an email subject 2026-10-14 19:19:51 +02:00
Linus Rath 3d5c46bbcf fix: make plugin sidebar rows as tall as folder rows on phones 2026-10-14 18:49:56 +02:00
Linus Rath 9affb1c9b9 fix: show plugins the message that was already open when they start 2026-10-14 18:49:22 +02:00
Linus Rath eba711bd54 Merge branch 'feat/plugin-system-audit' 2026-10-14 18:09:19 +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 c6ec58e5cc fix: keep a compact info bar's text on one line next to its icon 2026-10-14 14:22:13 +02:00
Linus Rath 60fe6f159a fix: keep plugin frames on the page's theme when it changes outside the theme store 2026-10-14 14:16:32 +02:00
Linus Rath 7464e4db93 fix: reset the browser's button look on kit components that are a button themselves 2026-10-14 14:08:41 +02:00
Linus Rath d808f2d671 feat: add side panels, detail rows, colour dots and labelled check boxes to the plugin UI kit 2026-10-14 14:04:46 +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 633df44090 fix: keep the sign-in response small enough for proxies with large OIDC tokens #1237 2026-10-14 13:59:41 +02:00
Linus Rath 2ddc2bf00e fix: keep lists, quotes and headings in the HTML plugins put into a message 2026-10-14 13:20:21 +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 6098c1f928 feat: add a change preview to the plugin UI kit 2026-10-14 11:42:12 +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
Linus Rath cbeeca3ea5 feat: let plugins edit the message being written from composer buttons and menus 2026-10-14 11:35:00 +02:00
Linus Rath 1bd4f743a1 feat: give plugins the app's own controls and draw their dialogs like the app's dialogs 2026-10-14 11:10:14 +02:00
Linus Rath 607f1b2496 feat: let plugin notifications carry a link to the plugin's own server 2026-10-14 10:58:19 +02:00
Linus Rath 7f7f6bf949 fix: check the name, type and size of blobs plugins upload, and the email id of email.setKeyword and email.removeKeyword 2026-10-14 10:00:03 +02:00