Commit Graph

188 Commits

Author SHA1 Message Date
rustmailer
388773bd2e update 2026-08-25 17:26:31 +08:00
rustmailer
a0d69f43b6 update 2026-08-25 17:03:25 +08:00
rustmailer
704678234b Update index.tsx 2026-08-19 15:33:05 +08:00
rustmailer
0d800a48bb Merge pull request #350 from sripwoud/fix/dedup-duplicates-count
fix(core): count deduplicated imports as duplicates, not successes
2026-08-19 15:25:17 +08:00
rustmailer
eaba876de5 refactor: reorder import UI flow to select files before folder 2026-08-19 15:00:06 +08:00
sripwoud
f357d45235 feat(web): reassure on hover that duplicates are already archived
The anxiety behind a surprise duplicates count is "did I lose
something?" — a native title tooltip on the counter answers it:
these messages are already in the archive. Key added to all 18
locales.
2026-08-19 08:45:21 +02:00
sripwoud
46eeab8100 fix(web): localize duplicates counter and hoist processed math
duplicateCount existed only in en.json, so 17 locales fell back to
English inside an otherwise localized panel. The processed count,
percentage and progress bar computed success+failed+duplicates
inline three times; hoist it once so the three can never disagree.
2026-08-19 08:45:21 +02:00
sripwoud
e72a53a4d0 fix(web): restore duplicates display in import progress
Reapplies what c067655 reverted: the duplicates counter next to
success/failed and duplicates included in the processed count and
percentage. The server now reports real duplicate counts on every
upload-import path, so the display no longer renders dead zeros.
2026-08-19 08:45:21 +02:00
rustmailer
1b2952a6b0 fix: resolve React hooks order violations in account dialogs 2026-08-19 13:54:13 +08:00
sripwoud
c067655171 revert(web): drop duplicates display until the server reports them
The upload-import path never increments duplicates (a dedup hit
returns Ok and counts as success), so the counter and the progress
math addition could only ever render dead zeros. The display returns
together with the server-side fix; the client-side aggregation of the
duplicates field stays, as issue #2 specifies.
2026-08-18 18:34:02 +02:00
sripwoud
350ec8da1e feat(web): clarify batch import copy and surface duplicates
The import footer showed 'Will import to: X' with no sign that the
whole selection lands in that one folder, and the detected-folder
badge never said which file the hint came from (only the first valid
file is consulted). Multi-file selections now show the file count in
the footer and the hint's source file in the badge.

The results card now renders the aggregated duplicates count and the
processed math includes it. The upload-import path currently always
reports duplicates as 0 (duplicates return Ok and count as success
server-side), so this only becomes visible once the server reports
them, but the aggregate and display are ready.

Header unfolding in extractFolderHint matched any whitespace-led line
in the remaining 64 KB, so body text could be glued onto the folder
name; it now stops at the first non-continuation line per RFC 5322.
2026-08-18 18:23:35 +02:00
sripwoud
9a5816a458 fix(web): import all selected files, not just the first
The file picker allows multi-select but the import mutation only ever
uploaded files[0], silently dropping the rest. upload-import is
one-file-per-call and async: it returns Pending immediately and the
real counts only exist at /import-progress/:id, so summing upload
responses would aggregate zeros.

importFiles() loops the selection sequentially: upload, poll to a
terminal status, merge counts and failed_details into an aggregate.
A file that fails upload or polling becomes a synthetic failure entry
(labelled with the file name) instead of aborting the remaining
uploads; only when every upload transport-fails does it throw so the
existing toast-and-reset path still handles total failure. Upload
progress is byte-weighted across the whole selection so the bar never
resets between files. An AbortSignal wired to component unmount
replaces the deleted setInterval cleanup so polling cannot outlive
the page.

Fixes #2
2026-08-18 17:53:19 +02:00
rustmailer
d27b0f274f update 2026-08-09 17:44:23 +08:00
rustmailer
6e1c75bba8 update 2026-08-09 17:42:49 +08:00
rustmailer
17750e9b80 update 2026-08-09 17:33:02 +08:00
rustmailer
4809f298e9 update 2026-08-09 16:45:00 +08:00
rustmailer
adb94263c0 feat(audit): audit log page, full event coverage, retention cleanup, and duplicate-view dedup 2026-08-07 00:50:13 +08:00
rustmailer
ed02c642c8 feat(imap): gap-fill missing-mail repair with live progress UI 2026-08-06 01:18:20 +08:00
rustmailer
75d345b742 feat(imap): resilient batched sync, stale-session cleanup, and live progress UI
- Add SyncFull trigger and configurable IMAP socket read timeout
  - Replace streaming UID FETCH with UID SEARCH ALL + batched fetch so per-message progress stays responsive and throttling servers can retry with reconnection
  - Finalize stale Running sessions on startup so interrupted syncs no longer show a phantom "syncing" state
  - Show a live syncing pill on the account row; add elapsed time, current folder, and slow-server warning styling in the dialog
2026-08-04 17:47:42 +08:00
rustmailer
9b1f6cae8c update 2026-08-03 00:17:00 +08:00
rustmailer
e57d1e41e0 fix(web): consume OIDC access_token and add dual SSO sign-out 2026-08-03 00:04:51 +08:00
rustmailer
8ab549c27c Merge branch 'main' of https://github.com/rustmailer/bichon 2026-07-31 18:03:07 +08:00
rustmailer
1b7daff10d fix: Proxy field shows error when editing an account #335 2026-07-31 18:03:05 +08:00
rustmailer
7c7a490091 Merge pull request #325 from hammaschlach/feature/imap-poll-interval
Allow IMAP sync intervals as low as 1 minute
2026-07-29 17:07:49 +08:00
rustmailer
022813a17c Update account-settings-page.tsx 2026-07-28 23:37:06 +08:00
rustmailer
02e9864343 Merge remote-tracking branch 'origin/main' into replace-fjall-with-blob 2026-07-28 21:38:44 +08:00
rustmailer
664ac2fe55 fix: can't set proxy for email account (IMAP) #326 2026-07-20 23:00:36 +08:00
misolau
b4972d81f0 Allow IMAP sync intervals as low as 1 minute 2026-07-15 08:35:22 +00:00
rustmailer
85987e39fb update 2026-07-13 00:04:53 +08:00
rustmailer
166ac21549 feat: add tag display and editing to email view 2026-07-08 00:30:20 +08:00
8times4
24fcca70a5 expand proxy provider support 2026-06-30 14:59:08 +02:00
rustmailer
2da42134d0 feat: Improve account setup UI and add post-download email filtering 2026-06-30 09:42:03 +08:00
rustmailer
4996dac1ea Update folder-hint.ts 2026-06-28 11:39:44 +08:00
rustmailer
42ce36a439 feat: add searchable account selector with alphabetical sort in user dialog #289 2026-06-28 11:35:39 +08:00
rustmailer
40ae2d49d4 feat: web upload supports PST, configurable MBOX/PST size limits
- Make MBOX/PST upload size limits configurable via SETTINGS
    (bichon_web_mbox_upload_limit_mb defaults to 1 GB,
     bichon_web_pst_upload_limit_mb defaults to 2 GB)
2026-06-28 09:43:50 +08:00
rustmailer
5034760517 fix: detect previewable attachments by file extension when MIME type is octet-stream #309 2026-06-27 16:08:42 +08:00
rustmailer
875eb2e309 fix:Truncate "To" column recipients in Search tab to prevent excessive row height #308 2026-06-27 13:06:41 +08:00
rustmailer
0d37825625 feat: fullscreen attachment gallery with image navigation 2026-06-26 19:13:14 +08:00
rustmailer
cfb8172607 fix: sliding token expiry and silent 401 redirect 2026-06-26 18:29:18 +08:00
rustmailer
8641bb4b56 fix: Proxy does not support formats from proxy providers #307 2026-06-26 18:20:19 +08:00
rustmailer
cdf27f2dd4 feat: add web upload for EML/MBOX files #260 2026-06-26 17:49:35 +08:00
rustmailer
db36272bae feat: add in-browser attachment preview for images, PDFs, and text files #303 2026-06-25 04:51:05 +08:00
rustmailer
cad447275f feat: search for an email address simultaneously in to, cc and bcc #304 2026-06-25 02:36:24 +08:00
rustmailer
8542ba0d28 feat: Display Name / Alias for IMAP Accounts #306 2026-06-25 02:00:20 +08:00
rustmailer
9e55026f12 feat: add SSO/OIDC support to user model and settings 2026-06-24 17:32:14 +08:00
rustmailer
41c3b84e65 feat(ui): persist account table sorting to localStorage 2026-06-21 12:50:21 +08:00
rustmailer
c736afffb0 fix: account deletion times out #291 2026-06-07 15:34:38 +08:00
rustmailer
a2a51a2037 feat(imap): add message size check before download 2026-06-03 21:17:35 +08:00
rustmailer
f30cd66e00 feat: remove folder limit 2026-05-26 15:22:14 +08:00
rustmailer
005b1c2116 feat: added Cron scheduling for email downloads #211 2026-05-23 15:40:46 +08:00