Commit Graph
1207 Commits
Author SHA1 Message Date
Linus Rath 47e89b678e fix: scope demo queries to the account they are asked for, so merged views and search list each message once 2026-10-18 20:06:39 +02:00
Linus Rath 4c0017d0c1 feat: rework the demo around one persona with two accounts and a shared mailbox
The demo user becomes Nora Lindqvist, engineering lead at Meridian Labs,
in the week of a product launch. The fixtures tell one story across mail,
contacts, calendar, tasks and files, and exercise the features the
screenshots and the public demo should show:

- a second, mail-only login (her personal domain) and the shared Support
  mailbox delegated to the work account, so the account switcher, the
  shared section and the merged inbox have real content
- raw headers the way Stalwart writes them: the sender check fails on
  the phishing mail, newsletters carry a one-click unsubscribe, one mail
  asks for a read receipt, and spam scores show in the details
- an iMIP invitation with a served .ics, an event waiting for the answer
  on the calendar, and RSVP patches applied in the demo client
- @mentions as mailto links in a received mail, a verification code
  twelve minutes old, nested folders, named tags on the mail, contact
  groups, a scheduled message and tasks switched on
- every attachment and file backed by real bytes under public/demo,
  generated by `scripts/demo-assets/generate.mjs`; contact photos are
  bundled portraits instead of requests to randomuser.me
- folder counts computed from the mail instead of hand-kept numbers

Demo login seeds the tags, templates and merged-inbox settings once per
device and switches the cross-account gate on for the session; "Reset"
restores them. `bulwark-demo-simulate=off` in localStorage stops the
simulated incoming mail for screenshot runs.
2026-10-18 19:48:11 +02:00
Linus Rath eb18a13878 feat: show the contact card for @mentions in the composer and in received mail 2026-10-18 18:23:45 +02:00
Linus Rath fbae8acfb8 feat: turn @mentions into chips with a hover card 2026-10-18 17:52:11 +02:00
Linus Rath 0ac7bcb385 feat: show the message list as columns with one-line conversation rows #262 2026-10-18 17:37:21 +02:00
Linus Rath 8791fa5176 feat: offer contacts in @ mentions and add the picked one as a recipient 2026-10-18 16:36:28 +02:00
Linus Rath 0e6733d5e6 fix: drop plain-text emphasis markers from message previews #1260 2026-10-18 16:23:54 +02:00
Linus Rath 45840e722a Merge pull request #854 from dev-hive-kazniisa/fix/keyword-rename-sieve-sync
fix: renaming a tag leaves filter rules tagging under the old id
2026-10-18 15:02:15 +02:00
Linus Rath 99cf78a280 fix: keep shared folders from other servers when they reuse an account id #1108 2026-10-18 14:58:53 +02:00
Linus Rath 4f9271e25b Merge pull request #1108 from hildebrandttk/fix/cross-view-shared-folder-dedup
fix: list a shared folder reachable through two logins only once in c…
2026-10-18 14:57:30 +02:00
Linus Rath f3482ce020 fix: remember restored sign-ins only when the restoring account is remembered 2026-10-18 14:39:59 +02:00
Linus Rath 1e992e6c7f fix: check plugin dropdown messages before the host draws them 2026-10-18 14:39:59 +02:00
Linus Rath 7573471544 fix: keep plugins from reading mail of other connected logins #1273 2026-10-18 14:39:58 +02:00
Linus Rath 811e175cd0 fix: tell today's mail by the time zone setting in the sender line #1259 2026-10-18 14:39:58 +02:00
Linus Rath 402188a4d5 Merge pull request #1125 from guisea/fix/inline-attachments-reply-forward
fix(email-composer): normalize bracketed content-ids for inline reply/forward images
2026-10-18 14:38:13 +02:00
Linus Rath 1ff7db0827 Merge pull request #1254 from raudraido/feat/add-estonian-locale
feat: add Estonian (et) locale
2026-10-18 14:34:37 +02:00
Linus Rath 100da43991 Merge pull request #1247 from lucamzanon/feat/account-archive-passwords
feat: optionally keep mailbox passwords in the account list backup
2026-10-18 14:34:31 +02:00
Linus Rath 5aba2a92c5 Merge pull request #1251 from tobiasge/feat/plugin-ui-kit-combobox
feat(plugins): add Combobox component to UI kit with host floating dropdown portal
2026-10-18 14:34:26 +02:00
Linus Rath 7dd8e93949 Merge pull request #1270 from vixh/fix/multi-account-self-reply
fix: reply to a message from another connected account goes to that account
2026-10-18 14:34:22 +02:00
Linus Rath 24e7e738bd Merge pull request #1274 from alyyousuf7/fix/plugin-email-get-shared-accounts
fix: let api.email.get read a listed message of a shared account
2026-10-18 14:34:18 +02:00
Linus Rath 1b5da75a47 Merge pull request #1262 from balabommablock-cpu/fix/relative-ago-calendar-days
fix: count calendar days in the time zone for the relative date
2026-10-18 14:34:14 +02:00
Linus Rath 1c8e7025e6 Merge pull request #1178 from VasilisNtovolos/fix/mixed-account-bulk-archive
fix: route bulk archive by owning account
2026-10-18 14:33:41 +02:00
Linus Rath 79d8287dfd Merge pull request #1256 from sanitz/fix/task-due-localdatetime
fix(tasks): send an all-day task's due and start as a LocalDateTime
2026-10-18 14:30:08 +02:00
Linus Rath 58eff0e879 Merge pull request #1258 from HOLOEYE-JZ/feat/archive-feature-gate
feat: admin policy gate to turn off archiving #1257
2026-10-18 14:29:27 +02:00
Linus Rath 5411a9ef50 Merge pull request #1272 from Peterka35/fix/mark-as-read-delay-thread-expand
fix: mark shared conversations read on the owner account, and follow markAsReadDelay when expanding a conversation
2026-10-18 14:21:50 +02:00
Linus Rath 710e32cc10 fix: ignore Nextcloud filter markers inside rule text 2026-10-18 14:19:07 +02:00
Linus Rath 8e7245b26c feat: let the theme policy set and lock the color mode #1280 2026-10-18 13:46:49 +02:00
Linus Rath 4adbad25f6 feat: end the provider session through a configured logout URL #1279 2026-10-18 13:46:48 +02:00
Linus Rath 86d6c78ce7 fix: keep a plugin slot's callbacks working when its props change while it loads #1266 2026-10-18 13:46:47 +02:00
Linus Rath a11a89d689 fix: skip vacation filter rules on shared accounts without sieve #1263 2026-10-18 13:46:47 +02:00
Linus Rath b811ad93cb fix: use the theme's sans font for the whole app #1278 2026-10-18 13:46:47 +02:00
Ali Yousuf 6fe9f8f7f1 fix: let api.email.get read a listed message of a shared account
doEmailGet asked the signed-in account for every id, so a message in a
folder shared from another account came back as null even though it was
in the list. A message in the loaded list is now read from the account
that owns it, through resolveEmailBlobContext like attachment downloads.
getAttachment and getRaw keep reading from the signed-in account only.

Fixes #1273
2026-10-17 18:41:31 -04:00
Peterka35 bbc3c2123e fix: follow markAsReadDelay when expanding a conversation or opening a Pro folder row
Expanding a conversation in the message list (row click, expand chevron,
or the `x` shortcut) and clicking a row in a Pro folder tab marked the
messages read straight away. They ignored "Mark as read: Never" and any
delay, which the reading pane and the conversation view follow.

Route them through one helper, scheduleAutoMarkAsRead: -1 never marks,
0 marks at once, any other value marks after that many milliseconds and
returns a cancel function.

- New store action autoMarkExpandedThreadAsRead keeps one pending timer
  per thread key. Collapsing the thread, or collapsing all threads, drops
  it. Both expansion paths (EmailList and the `x` handler in MailApp) use
  it.
- MailApp's handleEmailSelect drops the pending mark of every expanded
  thread other than the one the newly opened message belongs to, through
  cancelAutoMarkThreadAsRead. Moving on with `j`/`k` or a click no longer
  lets the delayed mark land on a conversation the user has left. The
  thread stays expanded.
- ProFolderTabBody schedules the row mark through the helper and drops a
  pending one when another row is opened or the tab unmounts.
2026-10-17 21:01:34 +02:00
Viktor Shulika MacBook Air M5andClaude Opus 5.5 76dbaf532a fix: reply to a message from another connected account goes to that account
With several accounts connected, the composer treated every account's
identities as "own" when deciding whether a message was self-sent (#703).
A message that account B sent to account A therefore looked self-sent
when replying from A, so the reply was addressed to the original To -
account A itself - and From was switched to B.

Self-sent now means "sent by the account holding the original":
buildReplyRecipients takes an optional selfSentEmails list (defaulting to
ownEmails, so single-account behaviour is unchanged), and the composer
passes the source account's identities there and to the From selection.
Reply-all still drops every connected account's addresses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 20:31:25 +02:00
Linus Rath 107d731af7 feat: remove a message from just the open folder when it is in several #615 2026-10-17 19:18:25 +02:00
Linus Rath 1ad1e31781 feat: set message priority in the composer #970 2026-10-17 19:18:23 +02:00
Linus Rath 8583c9efef feat: hide the version from the connector probe when the login page hides it #896 2026-10-17 19:18:21 +02:00
Linus Rath 03031fcb13 feat: jump to the next unread message with n #514 2026-10-17 19:18:20 +02:00
Linus Rath b611d9c028 feat: refresh sender icons that changed on the sender's website #960 2026-10-17 19:18:18 +02:00
Linus Rath 1c3cc35a7c feat: set the counter per folder, e.g. keep the Drafts count with totals off #982 2026-10-17 19:18:16 +02:00
Linus Rath f8ef54dbea fix: enable push notifications when another user shares a folder with you #1050 2026-10-17 19:17:59 +02:00
Linus Rath cbf917372c fix: show the mail's own date in the list and keep it on .eml import #891 2026-10-17 19:17:58 +02:00
Linus Rath 4a69a7df8a test: darken cells coloured with bgcolor in dark mode #693 2026-10-17 19:17:57 +02:00
Linus Rath b646ff0dc1 fix: preview attachments in the installed app instead of opening a blank window #865 2026-10-17 19:17:55 +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 49beaef852 fix: show zero-length events ending at their start instead of midnight #837 2026-10-17 19:17:50 +02:00
Linus Rath d47f26da20 fix: show invitation times in your time zone #1252 2026-10-17 19:17:49 +02:00
Linus Rath deb106736e fix: load the admin panel when the config is read-only #1249 2026-10-17 19:17:48 +02:00
Linus Rath a854447346 fix: apply admin policy defaults to user settings #1248 2026-10-17 19:17:46 +02:00