Commit Graph
4241 Commits
Author SHA1 Message Date
Linus Rath 6915813262 Merge pull request #1442 from illuwa-soft/feat/upstream-progress-toasts
feat: expose frame-scoped plugin progress toasts

# Conflicts:
#	lib/plugin-sandbox/host-bridge.ts
2026-11-01 18:11:12 +01:00
Linus Rath b903ba1e7a Merge pull request #1482 from HOLOEYE-JZ/feat/plugin-task-links
feat: let plugins set task links and related mail
2026-11-01 18:10:57 +01:00
Linus Rath cc6b8899d8 Merge pull request #1481 from HOLOEYE-JZ/feat/plugin-task-alerts
feat: let plugins set task alerts
2026-11-01 18:10:56 +01:00
Linus Rath c48b4428fa Merge pull request #1489 from VasilisNtovolos/fix/discard-pending-uploads
fix: cancel pending attachment uploads when discarding a draft
2026-11-01 18:10:50 +01:00
Linus Rath a3d4853974 fix: hide out of office when the account lacks the vacation permission #1488 2026-11-01 17:48:11 +01:00
Linus Rath c4d9a918bf feat: let admins preset and lock where a new search looks #1485 2026-11-01 17:44:37 +01:00
Linus Rath e4338ac47d feat: add the Search in setting to Message list settings #1485 2026-11-01 17:44:15 +01:00
Linus Rath 3c2eb9bffa feat: let a new search look only in the open folder #1485 2026-11-01 17:43:51 +01:00
Linus Rath aaafe428fe test: expect the full send options in the Pro compose draft account test #523 2026-11-01 17:40:53 +01:00
Linus Rath 52350876fd fix: label the offline and version API routes in metrics and error reports 2026-11-01 17:40:33 +01:00
Linus Rath 300d49a917 test: give the push prompt test's settings store mock the calendar sync bridge 2026-11-01 17:38:58 +01:00
Linus Rath 1b2281a4fc fix: stop the sidebar re-rendering on every message open #1486 2026-11-01 17:36:29 +01:00
Linus Rath 42a09f573d fix: let the Lite host scan accept the licence links in the PST worker 2026-11-01 17:26:31 +01:00
Linus Rath 296f728605 fix: copy the PST worker build script into the Docker image 2026-11-01 17:26:13 +01:00
Linus Rath 7e88eeaa60 test: send archived items without accountId like Stalwart does for regular users #1480 2026-11-01 17:25:23 +01:00
Linus Rath d70b51f097 fix: show deleted messages to recover on Stalwart 1.0 #1480 2026-11-01 17:24:09 +01:00
VasilisNtovolos 2a9a02b782 fix: cancel pending attachment uploads when discarding a draft 2026-11-01 18:00:10 +02:00
Linus Rath 1e35721505 Merge branch 'feat/enterprise-pack' 2026-11-01 15:44:44 +01:00
Linus Rath 69068d1b82 Merge branch 'feat/enterprise-pack-f' 2026-11-01 15:04:14 +01:00
Linus Rath 9ce7927627 fix: keep the old build's offline files from coming back after a deploy #523 2026-11-01 14:49:14 +01:00
Linus Rath 562a3270e3 test: cover the external recipient warning and lost-message naming in the offline spec #523 2026-11-01 14:37:39 +01:00
Linus Rath 4b60fcc1e6 fix: make the offline outbox never send twice, never lose mail silently and never skip a plugin #523
The review of offline mode found ways to send a message twice, to lose
unsent mail without a word, and to send mail without its signing,
encryption or check plugin. This fixes them and the smaller findings:

- each outbox message is taken for sending in one database transaction
  under a Web Lock per account; only a failure before the submission
  request (SendNotStartedError from the client) puts it back, any other
  one marks it "may have gone out"; read-backs after the submission no
  longer fail a send; a send of a closed tab turns uncertain after a minute
- every sign-out the user didn't confirm names the deleted messages on
  the sign-in page, or in a toast when another account stays signed in
- nothing is queued while an enabled plugin isn't running (after a start
  without the network none can); the composer says why
- the outbox waits for a fresh policy and holds messages the rules have
  since made stricter (a required label, a required send check)
- another tab switching offline mode off sticks: only switching it on
  may create the database
- only attachments of kept messages are kept, filed with their message,
  deleted with it and under the cap between syncs; file names and types
  are sealed; folders that went away leave the scope, and a folder that
  couldn't be asked keeps its mail without holding the others back
- a group scope that forbids offline mode waits until the account's
  groups are known; one server down no longer holds another's mail
- an offline start only when the server is really unreachable, and the
  real sign-in follows by itself once it answers
- the service worker files pages and chunks under the build that served
  them, and the shell list of another build isn't kept under this one
- a raw send counts as the composer's only from the plugin running its
  takeover, for that identity
- errors and refusals are in all languages; the banner tells "offline"
  from "server can't be reached"; outbox buttons name their message;
  changes and messages go in the order they were made
2026-11-01 14:19:54 +01:00
Linus Rath 52188f54d6 Merge branch 'feat/enterprise-pack' into feat/enterprise-pack-f 2026-11-01 13:50:22 +01:00
Linus Rath e9b235bab2 Merge branch 'main' into feat/enterprise-pack
# Conflicts:
#	components/admin/admin-shell.tsx
#	lib/admin/outgoing-hosts-registry.ts
#	lib/admin/reachable-hosts.ts
#	scripts/lite/build.mjs
#	stores/policy-store.ts
2026-11-01 13:46:59 +01:00
Linus Rath c32c78894a fix: keep saving an out-of-office reply working when its calendar block can't be synced 2026-11-01 13:33:42 +01:00
Linus Rath b196455720 test: give the plugin vacation API test the client methods the out-of-office calendar sync reads
The out-of-office calendar block (package B) syncs from the vacation store, so the plugin vacation API now reaches client.getAccountId and supportsCalendars. The real client has both; the test's mock client didn't, so two cases threw. The mock gains them; no assertion changed.
2026-11-01 13:25:01 +01:00
Linus Rath 2f8cbaa92e fix: let the Lite build pass with the offline and version endpoints it never calls #523 2026-11-01 13:13:18 +01:00
Linus Rath 1769de5b93 fix: let a new build's service worker take over while the old one still fetches the offline shell #523 2026-11-01 13:08:59 +01:00
Linus Rath 0b51a06fbc fix: take over with the new build's service worker also when it was still installing #523 2026-11-01 12:56:28 +01:00
Linus Rath eb26219b3c feat: send telemetry error counts within a minute when an admin turns on instant mode 2026-11-01 12:55:58 +01:00
Linus Rath 46012f2b80 test: cover offline mode, the outbox and the reload after a deploy against the test servers #523 2026-11-01 12:48:46 +01:00
Linus Rath 8b23c81372 fix: let the new build's service worker take over once a tab runs that build #523 2026-11-01 12:38:59 +01:00
Linus Rath 2ff2e713ec fix: keep the sign-in page from creating the offline database again #523 2026-11-01 12:22:35 +01:00
Linus Rath 308956d37f fix: delete the offline database at sign-out without opening it again #523 2026-11-01 12:18:36 +01:00
Linus Rath da4c880c5f fix: open the offline outbox from the banner without leaving the page #523 2026-11-01 12:14:50 +01:00
Linus Rath 6428c2b880 fix: answer from the device only when the mail server is really gone, and finish the first offline sync #523 2026-11-01 12:07:30 +01:00
Linus Rath 5a169dd63f fix: keep offline mode from counting a refused request as no network and keep folder counts in step offline #523 2026-11-01 11:57:16 +01:00
Linus Rath 5fa1722392 feat: let admins forbid offline mode 2026-11-01 11:46:11 +01:00
Linus Rath db5ac82f53 feat: keep recent mail on this device and send mail written offline #523
Settings > Backup & reset gets "Keep mail on this device", off until the
user turns it on in this browser. While it is on:

- the JMAP client hands the server's answers to an encrypted cache in
  IndexedDB (AES-GCM, non-extractable key) and answers from it when the
  network is gone: the folder list, the last 30 days of the Inbox and of
  the folders the user opened, bodies and attachments, at most 250 MB,
  oldest out first; a background sync keeps it current
- read, flag, tags and moves made offline are queued and sent in order
  when the server answers again; deleting for good and emptying a folder
  are refused offline
- the composer, quick reply and the S/MIME and PGP plugins' sends that
  complete the composer's go to an outbox once every step up to the
  transport ran (checks, label, signature, plugin send checks); only the
  finished send waits, with files attached offline
- the service worker keeps this build's app shell, so the app also
  starts offline from the kept session and the last policy
- a full sign-out, the idle sign-out and signing one account out delete
  it, a sign-out the user starts asks first when mail is unsent, and the
  login page names what an automatic sign-out deleted; a policy fetch
  that forbids it (devices.noOffline) wipes that account

Not in Lite.
2026-11-01 11:46:11 +01:00
Linus Rath 91be465cbc feat: version the service worker by build and offer a reload after a deploy 2026-11-01 11:13:31 +01:00
Linus Rath a480ddb6d1 Merge branch 'feat/enterprise-pack-e' 2026-11-01 10:52:08 +01:00
Linus Rath 465320dbfb test: say no plugin checks sends in the composer draft-login test
The test's mocked onBeforeEmailSend had no size, so the composer took
it for a listening send check and built the check's message, which
reads the sending login's identities from a client the test mocks
without getIdentities; the send stopped there. The real bus without a
plugin has size 0, which the mock now says too.
2026-11-01 10:51:54 +01:00
Linus Rath 0401352e6e Merge branch 'feat/enterprise-pack-d'
# Conflicts:
#	components/email/thread-conversation-view.tsx
#	lib/admin/outgoing-hosts-registry.ts
2026-11-01 10:48:21 +01:00
Linus Rath 1aed3eaf59 Merge branch 'feat/enterprise-pack-e' 2026-11-01 10:42:46 +01:00
Linus Rath 5b50a23390 test: wait for the message list and a finished Go back before sending in the plugin spec 2026-11-01 10:38:32 +01:00
Linus Rath bb29d919e6 docs: say link checks get the address the browser opens 2026-11-01 10:24:37 +01:00
Linus Rath 0a319cde2e test: fix the quote in a spec title 2026-11-01 10:15:22 +01:00
Linus Rath b9630959b9 test: cover blocked links, held sends and admin-page rules, and wait on conditions instead of clocks 2026-11-01 10:12:49 +01:00
Linus Rath 27e4f0cbac test: cover the file type the composer tells upload checks 2026-11-01 10:09:20 +01:00
Linus Rath 2cd1baa594 feat: let plugin frames run work they can stop in a worker 2026-11-01 10:07:41 +01:00