Linus Rath
fc6a209727
fix: keep push notifications off screen with email notifications off or do not disturb on
2026-11-04 03:13:56 +01:00
Linus Rath
7fb0242a7b
fix: open the new message from its notification however much older mail is unread
2026-11-04 03:13:56 +01:00
Linus Rath
376465ed80
fix: notify for every account a state-change push names
2026-11-04 03:13:56 +01:00
Linus Rath
6ca6448b5e
fix: remove the record from the old relay when push moves to another one
2026-11-04 03:13:56 +01:00
Linus Rath
2551823006
fix: let tabs take turns setting up push so two can't race into two subscriptions
2026-11-04 03:13:55 +01:00
Linus Rath
4586f16c2e
fix: remove the unverified subscription when push verification fails, and poll through a network blip
2026-11-04 03:13:55 +01:00
Linus Rath
3a805d1631
fix: restart push verification when the mail server skipped it after a quick off and on
2026-11-04 03:13:55 +01:00
Linus Rath
b0a36b7d1a
Merge commit '7f3d9c507' into feat/desktop-offline
2026-11-04 03:09:44 +01:00
Linus Rath
c4f30f7128
Merge remote-tracking branch 'origin/main' into feat/desktop-offline
2026-11-04 03:09:43 +01:00
Linus Rath
81d6948240
Merge branch 'main' of https://github.com/bulwarkmail/webmail
2026-11-04 03:08:16 +01:00
Linus Rath
7f3d9c5073
fix: let npm run build pass its guard, with the build run in CI
2026-11-04 02:45:46 +01:00
Linus Rath
dc8482ace0
Merge branch 'feat/do-quick-compose' into feat/desktop-offline
2026-11-04 02:06:51 +01:00
Linus Rath
f570277a61
chore: merge the desktop offline branch into quick compose
2026-11-04 01:45:09 +01:00
Linus Rath
724aed257f
Merge branch 'feat/do-sso-certs' into feat/desktop-offline
2026-11-04 01:34:33 +01:00
Linus Rath
71aaadef50
fix: run plugins' compose check in quick compose, keep a composer with one owner, and bring it back after a crash
...
The first version of quick compose skipped `onBeforeCompose`, a composer
moved back could end up open in both windows, a reply moved back under
Pro flagged the selected message, and a crashed pop-out came back blank.
- A new message in a pop-out runs `onBeforeCompose` with the same result
as the main window: a plugin that stops it closes the window.
- The way back has two steps, so a pop-out that gave up can't leave a
second owner. A handoff behind a plugin's gate makes it say busy.
- A Pro tab made from a composer moved back answers its own message.
- Each save writes `draft`, `account` and `owner` into the pop-out's
address, which a reload after a crash starts from. What was typed since
the last save, up to the 2 s autosave delay, is still lost.
- The recorder refuses keys that type a character on this keyboard, and
what the shell refuses from a page, and says why.
2026-11-04 01:31:43 +01:00
Linus Rath
889f6ffbd1
fix: fail requests under way when the desktop app closes its connections, and forget client certificates per account
2026-11-04 00:56:09 +01:00
Linus Rath
d0a636416d
docs: say where quick compose opens its window in the pop-out notes
2026-11-03 23:35:23 +01:00
Linus Rath
3da18cc2c0
feat: set the quick compose keys in the desktop settings and move a composer back into the main window
2026-11-03 23:25:10 +01:00
Linus Rath
8549e3c4c6
feat: translate the desktop app's client certificate picker and forget chosen certificates at sign-out and account switch
2026-11-03 23:21:56 +01:00
Linus Rath
514a9ba1d9
fix: keep the quote when typing in a reply as its inline images load
2026-11-03 22:08:18 +01:00
Linus Rath
7040a6a049
fix: reply and forward from the account holding the message in Pro tabs #1511
2026-11-03 22:06:21 +01:00
Linus Rath
54bda3ef3d
Merge branch 'feat/do-packaging' into feat/desktop-offline
...
# Conflicts:
# components/desktop/desktop-host.tsx
# lib/desktop/languages.ts
2026-11-03 22:02:10 +01:00
Linus Rath
43ba229c7d
Merge branch 'feat/do-perf-guard-2' into feat/desktop-offline
2026-11-03 21:50:37 +01:00
Linus Rath
2b4a1171ab
fix: show the spelling and unsent-mail labels in the desktop app instead of their raw keys
2026-11-03 21:50:09 +01:00
Linus Rath
b8cb12174c
fix: bring office editing back after sign-in when the first status check was refused #1518
2026-11-03 21:45:13 +01:00
Linus Rath
7509bd9f53
Merge branch 'main' into feat/desktop-offline
2026-11-03 21:37:32 +01:00
Linus Rath
d651ae857c
Merge remote-tracking branch 'origin/main' into feat/do-perf-guard
2026-11-03 21:34:59 +01:00
Linus Rath
717747b577
test: restore the session cookies in the forgotten PIN offline case, as Chromium's emulated outage lets a keepalive delete through
2026-11-03 21:33:52 +01:00
Linus Rath
a89cae5f28
fix: show the page skeleton from the first frame again, with or without an app lock
2026-11-03 21:33:51 +01:00
Linus Rath
fafdb0cdc0
fix: stop every search re-rendering the mail list when nothing is ticked
2026-11-03 21:06:48 +01:00
Linus Rath
b4bcce2b01
Merge branch 'main' into feat/desktop-offline
2026-11-03 19:53:36 +01:00
Linus Rath
423fe28b0b
Merge branch 'main' into feat/do-ci-fix
2026-11-03 19:50:46 +01:00
Linus Rath
776328b58d
chore: keep the vendored SQLite build out of lint
2026-11-03 19:49:57 +01:00
Linus Rath
7bd9768e4c
test: mock the desktop commands in the launch handler test, which would load every store
2026-11-03 19:49:57 +01:00
Linus Rath
1efe9bc8b4
test: tell reminders of two accounts apart by uid, since one meeting in both rings once
2026-11-03 19:49:57 +01:00
Linus Rath
d890addbf4
test: register devices a second apart in the cap test, since rows of one millisecond have no oldest
2026-11-03 19:49:56 +01:00
Linus Rath
4015bbad76
test: expect the hidden settings row without a plugin, since the desktop app shows it for the window controls
2026-11-03 19:49:56 +01:00
Linus Rath
ac2f7cba2b
test: allow keystore as the one bare plugin permission, since it has no actions and the S/MIME manifest uses the name
2026-11-03 19:49:56 +01:00
Linus Rath
fe3c213cb9
test: spell out the device policy defaults, since the offline caps are numbers where 0 means no cap
2026-11-03 19:49:55 +01:00
Linus Rath
5467f5db93
fix: let the Lite host scan know the desktop app's dictionary host
2026-11-03 19:49:55 +01:00
Linus Rath
984e6fa8d9
fix: label device and pop-out requests in metrics and error reports
2026-11-03 19:49:55 +01:00
Linus Rath
3f59af9c31
fix: delete offline mail right away when the local store doesn't answer
2026-11-03 19:49:55 +01:00
Linus Rath
135d1f000d
fix: keep the plugin side panel open while the next message loads
2026-11-03 19:49:54 +01:00
Linus Rath
26c009c302
feat: send the updater's translated text with the desktop menu labels
2026-11-03 19:45:23 +01:00
Linus Rath
529d334496
Merge branch 'fix/ui-bug-hunt'
2026-11-03 19:44:46 +01:00
Linus Rath
b8560579a4
Merge branch 'feat/do-import' into feat/desktop-offline
...
# Conflicts:
# lib/desktop/types.ts
2026-11-03 19:44:43 +01:00
Linus Rath
a96c66fa5e
Merge branch 'main' into feat/do-packaging
...
# Conflicts:
# components/settings/general-settings.tsx
# lib/desktop/types.ts
2026-11-03 19:37:41 +01:00
Linus Rath
1e9afb733a
fix: let the Docker image build see the script its Next config imports
2026-11-03 19:19:35 +01:00
Linus Rath
b92b488e39
fix: stop a local import losing messages on a held file and name what a resume leaves out
...
Fixes from the review of the desktop import.
- A message another program holds is no longer recorded as deleted. Only a
real absence moves the import past it; anything else is tried again and
then reported as a failure, and the next run reads it.
- A resume that can't read some folders names them in a toast with a choice
to stop trying, keeps the job open and retries only those at the next start.
Files chosen by hand in the same dialog are named, since they can't come
back by themselves.
- A wipe or sign-out releases the job in the shell before the record goes.
Leaving the dialog without starting releases the confirmed files. Job
records are per account, and a start is refused while another window holds
that account's job.
- Dedupe goes by the bytes without state headers: a reused Message-ID of the
same length dropped a real message. Older records still count, so nothing
goes in twice.
- A lost connection on a folder or Email/import pauses instead of counting
towards the failures that stop an import.
- The taskbar goes through `lib/desktop/taskbar-progress.ts`.
Test changes: the taskbar test now renders the host, because its helper in
`local-import-job.ts` is gone, and the dedupe tests use `check`, which replaced
`keyFor` and `has`.
2026-11-03 19:17:38 +01:00
Linus Rath
5849f9dc42
Merge branch 'main' into feat/desktop-offline
2026-11-03 19:07:04 +01:00