Commit Graph
1166 Commits
Author SHA1 Message Date
Tomás Romero decaaa0900 fix: guard document exports and cap mobile snapshots 2026-10-18 03:46:11 +02:00
Tomás Romero 0f1d0eee2f chore: sync main 2026-10-18 03:40:30 +02:00
Tomás Romero f1f9364b90 fix: restore desktop dialog titles and filters 2026-10-18 03:40:02 +02:00
Tomás Romero f185ffa812 style: format data_controller 2026-10-18 03:36:26 +02:00
Tomás Romero 3ffe140c4d docs: note document export staging 2026-10-18 03:36:22 +02:00
Tomás Romero 2f759a0488 fix: run backup and snapshot exports on the runtime 2026-10-18 03:36:22 +02:00
Tomás Romero a41a7d8b50 fix: run compose picker on the runtime 2026-10-18 03:36:22 +02:00
Tomás Romero c124518b23 refactor: simplify import_many 2026-10-18 03:36:22 +02:00
Tomás Romero 4ff710eea0 Merge pull request #79 from springmin/pr2-backfill
fix: escalate the content-fetch retry backoff
2026-10-18 03:33:17 +02:00
Tomás Romero 121101ad9b chore: sync flatpak sources 2026-10-18 01:53:41 +02:00
Tomás Romero 53484d31c7 chore: fix dependency audit 2026-10-18 01:51:18 +02:00
Tomás Romero a4b615e2a1 chore: fix dependency audit 2026-10-18 01:36:59 +02:00
Tomás Romero 4f0bbdf019 chore: sync main 2026-10-18 01:32:19 +02:00
Paul van der Vlis 667b865c49 chore(l10n): add Dutch translation
Translation: Mail/Flectar Mail
Language: Dutch
Translate-URL: https://translate.flectar.com/projects/flectar-mail/mail/nl/
2026-10-17 22:00:48 +00:00
Tomás Romero efd1554208 chore: harden URL opening 2026-10-17 23:33:07 +02:00
Tomás Romero f49ba4b66b fix: harden content retries 2026-10-17 23:29:44 +02:00
springmin 21169095e6 documents: route attachments, backups and snapshots through the host provider
Compose attachments, account-backup export/import and database-snapshot
export still opened desktop file dialogs directly, so on mobile they
reported "no picker" even though the host provides a DocumentProvider.

- DocumentProvider::import_many() imports several documents for one action
  (default: repeat import() until the picker is cancelled; the desktop
  provider uses one multi-select dialog). Imported documents stay alive in
  the composer until Core has staged the attachments.
- Compose attachments use import_many() instead of rfd::FileDialog.
- Backup export/import stage one app-private file and hand it to the
  provider; the existing import logic keeps its synchronous shape on the UI
  thread executor.
- Database snapshots keep Core's verified snapshot, archive it as one zip
  (hosts export files, not folders) and pass it to the provider. Staging
  stays outside the data/cache roots Core requires.
- Desktop behavior is unchanged: same dialogs and file names.
2026-10-18 00:51:57 +08:00
springmin 7ea2a02974 refactor: route external links through a platform opener seam
Email links called webbrowser::open directly, which fails on platforms that
cannot spawn helper processes (there is no xdg-open and friends everywhere).
The provider authorization flow already had a platform-aware opener; this
generalizes the path for arbitrary external addresses:

- browser::set_external_url_opener() lets a platform integration install its
  own opener (first registration wins).
- browser::open_external() uses that opener when present and falls back to
  the webbrowser crate otherwise (no behavior change on desktop).
- open_email_link uses it instead of calling webbrowser directly.
2026-10-17 16:08:43 +08:00
Tomás Romero f6f419e228 Merge pull request #78 from ziahm6638/select-next-mail-after-removal
fix: open the next message after archiving or trashing the open one
2026-10-17 03:09:09 +02:00
Tomás Romero f8ce83cf4c fix: reveal next message after removal 2026-10-17 00:57:25 +02:00
Zishan Ahmed 39c6c559bf style: return the removal flag directly (clippy::let_and_return) 2026-10-16 21:30:25 +01:00
Zishan Ahmed 09f9f429ef fix: open the next message after archiving or trashing the open one
When the open message left the list (archive, trash, spam, move, or a
sync removal), the background refresh cleared the selection and the
reader fell back to the first row, losing the user's place.

Remember the previous visible order and select the next surviving row
below the removed message, or the nearest one above when it was last.
2026-10-16 21:22:58 +01:00
Tomás Romero 149ca416dc Merge pull request #76 from springmin/sent-dedup
fix: stop doubling Sent copies on servers that auto-save
2026-10-16 21:30:49 +02:00
Tomás Romero 40b95ab551 chore: match CI gettext wrapping in zh_Hans header 2026-10-16 19:59:19 +02:00
Tomás Romero 7c32f04056 chore: fix security and translation checks 2026-10-16 19:24:17 +02:00
Tomás Romero 48977e9411 test: fix regression checks 2026-10-16 17:37:26 +02:00
Tomás Romero 378b5eec15 chore: complete translations 2026-10-16 17:37:26 +02:00
Taivas Jumala 1d2137f455 chore(l10n): update Chinese (Simplified Han script) translation
Co-authored-by: Taivas Jumala <taivas_jumala@yafoss.org>
Language: Chinese (Simplified Han script)
Progress: 100.0% (1298 of 1298 strings)
Translate-URL: https://translate.flectar.com/projects/flectar-mail/mail/zh_Hans/
Translation: Mail/Flectar Mail
2026-10-16 15:25:16 +00:00
Cyril Hansen 6d4d975d6d chore(l10n): update French translation
chore(l10n): update French translation

Co-authored-by: Cyril Hansen <cyril.hansen@gmail.com>
Language: French
Progress: 4.0% (53 of 1298 strings)
Progress: 6.3% (83 of 1298 strings)
Translate-URL: https://translate.flectar.com/projects/flectar-mail/mail/fr/
Translation: Mail/Flectar Mail
2026-10-16 15:25:16 +00:00
6uu1 2f40739517 chore(l10n): update Chinese (Simplified Han script) translation
Co-authored-by: 6uu1 <translate.flectar.com@696988.xyz>
Language: Chinese (Simplified Han script)
Progress: 93.7% (1217 of 1298 strings)
Translate-URL: https://translate.flectar.com/projects/flectar-mail/mail/zh_Hans/
Translation: Mail/Flectar Mail
2026-10-16 15:25:16 +00:00
Ulrik Motzfeldt-Skovgaard 2f96a197b9 chore(l10n): add Danish translation
Co-authored-by: Ulrik Motzfeldt-Skovgaard <ulrik@m-s.gl>
Language: Danish
Translate-URL: https://translate.flectar.com/projects/flectar-mail/mail/da/
Translation: Mail/Flectar Mail
2026-10-16 15:25:16 +00:00
Tomás Romero 08425af402 chore: document the platform architecture 2026-10-16 17:19:00 +02:00
Tomás Romero 2d4a620321 chore: lint every platform in CI 2026-10-16 16:04:13 +02:00
Tomás Romero b28091e488 chore: route platform code through capability aliases 2026-10-16 16:04:13 +02:00
Tomás Romero d6f57cb3ff chore: hide focus outline on automatic mail list focus 2026-10-16 15:02:07 +02:00
Tomás Romero d6b502c4e3 chore: keep mail list rows clear of the scrollbar 2026-10-16 15:02:07 +02:00
Tomás Romero da957e1fad fix: reconcile sent copies safely 2026-10-16 14:34:27 +02:00
Tomás Romero 6e6f9de4a9 chore: add Windows cross-build script 2026-10-16 03:40:05 +02:00
springmin 2dec7dbe63 test: cover the Sent-folder adoption candidate
Mirrors the jmap_adoption_candidate tests: the server's rewritten copy is
adopted by subject plus send time, the +/-2 minute window is inclusive, two
candidates are rejected as ambiguous, and neither incoming rows nor outgoing
rows that already carry a uid are ever candidates.
2026-10-16 09:25:57 +08:00
springmin cadeb7740e fix: escalate the content-fetch retry backoff
A body that never decodes (a message the server expunged while its row
lingers, an undecodable part) was retried every 60 s forever: the drain
loop could neither persist it nor clear it, so "made no progress"
warnings repeated each minute. Attempts now widen the retry window
(1 min x5, then 15 min x15, then 24 h), so a poison message parks instead
of looping.

Adds repo::sync_failures::content_attempts plus a unit test.
2026-10-15 10:43:13 +08:00
springmin f93f2b81d2 fix: file Sent copies by IMAP uid so retries cannot duplicate them
Outlook rewrites Message-IDs in some folders, which made the header-search
idempotence guard miss an already-appended copy (retries appended twice)
and left sent rows without a uid, so the next Sent-folder sync inserted the
server copy as a second message.

The append action now records the copy's uid: an existing match from the
header search is reused; otherwise UIDNEXT is captured before the append and
the pre-append value is adopted when exactly one message appeared (a bigger
delta falls back to a re-search). Both branches log at INFO with the uid.
2026-10-14 18:23:38 +08:00
springmin 3b097df797 fix: stop doubling Sent copies on servers that auto-save
Microsoft's SMTP path auto-saves a copy of every submission into Sent, and
the app appended its own copy as well, so a send produced two Sent messages.
Outlook also rewrites Message-IDs in some folders, breaking the header-search
idempotence guard: retries appended twice and the Sent-folder sync imported
the server copy as a third message (the queued row carried no uid).

- Microsoft joins Gmail in skipping the local append; the server's copy is
  the single source of truth for those accounts.
- The Sent-folder sync adopts the server copy into the queued outgoing row
  when the Message-ID was rewritten (same folder, is_outgoing, uid IS NULL,
  same subject and a +/-2 minute send-time window; two candidates are
  rejected as ambiguous), mirroring jmap_adoption_candidate.

Existing duplicates on the server are user data and are left in place.
2026-10-14 16:46:31 +08:00
Tomás Romero ddf2ce63b3 chore: validate Android OAuth configuration 2026-10-13 21:03:18 +00:00
Tomás Romero 2ee87d1e07 chore: initialize Android TLS verification 2026-10-13 20:51:31 +00:00
Tomás Romero 19d449ca39 chore: fix Android native callback loading 2026-10-13 20:48:15 +00:00
Tomás Romero f605115a25 chore: upgrade Blitz to v0.3.0-beta.3 2026-10-12 16:55:13 +00:00
Tomás Romero adf9e00e78 chore: render screenshot emails with dark mode 2026-10-11 23:26:34 +00:00
Tomás Romero f31c0c12b9 chore: load composer sender identities from cache 2026-10-11 20:38:40 +00:00
Tomás Romero 76dc423241 chore: keep manual sender identities after refresh 2026-10-11 20:38:39 +00:00
Tomás Romero ba169cdba3 chore: respect IMAP deleted flags 2026-10-11 19:52:40 +00:00