Commit Graph

10614 Commits

Author SHA1 Message Date
Jake Tarren (DevOps Overlord)
2f6f48c2a9 docs: Fix async-imap and async-smtp URLs in README.md (#8637)
Fix SMTP and IMAP url
2026-08-28 15:39:06 +00:00
WofWca
0517beef61 fix: don't notify of missed call from blocked user
Closes https://github.com/chatmail/core/issues/8576.

The diff might look big, but it's only two things:
- move `can_call_me` one scope up
- replace `emit_incoming_msg` with `emit_msg_event`
  with `important = can_call_me`

I decided not to completely unify the `important` logic
with the other occurrence of `emit_msg_event()`
as I suggested in the issue yet.
That IMO should still be considered, but let's start simple.

Note that there is #7840 which may be closed by #7955,
which will basically supersede this MR.
I think, however, that it's OK to merge this one,
and then that one can just revert this one, including tests,
and rebase on top of the revert.
2026-08-28 09:11:09 +00:00
link2xt
693c404266 fix: do not try to load profile image from param for self
I have an old profile which has ProfileImage param
set on the reserved SELF contact.  When I deleted
an avatar from the profile, very old profile image
showed up in the settings in Delta Chat Desktop instead,
which can be "deleted" again without any result.

This fix is to return `None` early from get_profile_image_ext
for self contact without trying to load the parameter.
Fallthrough to loading params was likely there
since keycontacts and grey avatars for address contacts
introduction in 416131b4a2
2026-08-27 21:44:45 +00:00
holger krekel
a344cab046 refactor: rename automatic_relay_management to autorelay
"automatic_relay_management" is a long unwiedly name with no UI using the mode yet,
so let's rename it to something more succinct: autorelay
2026-08-27 16:52:38 +02:00
holger krekel
96f051a2f0 fix: produce correct wheel metadata
all published deltachat-rpc-server wheels so far fail "wheel tags"
and probably other tools.
Translate "dev" cargo-versioning to PEP440-versioning
to make CI dev wheel builds reproducable at least for the 11 non-mac targets.
2026-08-27 16:27:18 +02:00
link2xt
9a33555604 test: test dc_send_msg_sync() 2026-08-26 20:22:57 +00:00
link2xt
3af45c306a fix: make create_send_msg_jobs actually return row IDs
.execute() was returning the number of rows, so usually 1.
.insert() is returning the row ID.

In most cases it does not matter because the result is checked with .is_empty(),
but send_msg_sync() actually uses the row IDs.
2026-08-26 20:22:57 +00:00
link2xt
709c56a889 refactor: make create_send_msg_jobs() private
It is not called from outside the "chat" module.
2026-08-26 20:22:57 +00:00
link2xt
7421e67ab6 feat: do not create device messages for IMAP authentication errors
Authentication failures may happen because of internal server errors.
Device message saying "Please check if the email address and the password are correct"
was written for classic email setups when the user knows the password.
For users of chatmail relays this message is not actionable,
but still appears when relay fails to check the password.
2026-08-26 13:53:02 +00:00
j-g00da
49496756e4 refactor: Don't include email addresses in export filenames (#8626)
Changes filenames used in the db backups and key exports,
preferring fingerprint over the email address.

Part of: #8572

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-26 13:44:06 +02:00
holger krekel
ea3ca3a213 fix: reliably complete configuration with progress=1000 or progress=0
this is meant to help configuration event consumers (Python, UIs)
to not hang waiting for configuration outcomes.
One test case is added that fails on main.
2026-08-24 19:09:34 +02:00
link2xt
6c47e86380 refactor: turn DC_MSG_ID_* into MsgId::* associated constants 2026-08-22 20:21:20 +00:00
link2xt
fe25e93d6c refactor: turn DC_CHAT_ID_* into ChatId::* associated constants
We already have it done for ContactId.
2026-08-22 20:21:20 +00:00
link2xt
0b2ff5d0e2 fix: take timestamp_rcvd into account in estimate_deletion_cnt
This did not affect actual message deletion,
because select_expired_messages already takes timestamp_rcvd
into account and does not delete system messages
that say "Messages are end-to-end encrypted" too early.

So it is a minor bug as estimate_deletion_cnt
is meant to only roughly estimate the number of messages
to be deleted. Still, there were no tests before,
so now estimate_deletion_cnt is tested.
2026-08-22 20:21:20 +00:00
WofWca
48888898ee docs(json-rpc): clarify when reactions is None
Initially I thought that this is only `null`
when reactions are somehow not applicable to this message.
2026-08-22 20:58:09 +04:00
holger krekel
c9880d0ba6 chore: start checking column documentation in CI and add comment for "transports.add_timestamp" 2026-08-22 18:07:16 +02:00
link2xt
d2286254b3 ci: update Rust to 1.98.0 2026-08-22 12:52:12 +00:00
j-g00da
589a628cda refactor: Don't store email address in location KML. (#8615)
Address inside the KML is not used anywhere,
and we are moving away from "primary" relay notation (and thus also
identifying contacts by email address).

Part of: #8572

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-21 13:46:29 +02:00
link2xt
3df1e3712a fix: send legacy securejoin key requests as multipart/mixed
chatmail relays (filtermail) expect {vc,vg}-request
messages to be multipart/mixed with a single part.
Messages had this structure
before commit e0494b0b37
so we need to keep it for compatibility.
2026-08-20 20:31:27 +00:00
link2xt
f09f8fd8a4 docs: always suggest using --locked with "cargo install"
Otherwise the lockfile is completely ignored
as <https://doc.rust-lang.org/cargo/commands/cargo-install.html#dealing-with-the-lockfile>
says "By default, the Cargo.lock file that is included with the package will be ignored."

Mostly a reaction to <https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/>
2026-08-20 16:00:15 +00:00
link2xt
357c6e74d5 build: use --locked in scripts/clippy.sh
This is mostly a reaction in response to
https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/

I don't know when exactly
`cargo clippy` and similar commands (check, build, run etc.)
may update dependencies
and it does not look like they actively pull
the package index and update yanked crates.
We also keep the lockfile updated all the time
by checking in CI.

Still, all commands better use --locked as a precaution.
2026-08-20 14:52:32 +00:00
j-g00da
484d56f24d feat: Use display name for contacts in encryption info (#8609)
Email address is already present in the list of relays,
a display name is more useful.

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-20 08:00:30 +02:00
holger krekel
8f3337d971 refactor: move pgp tests to submodule 2026-08-19 02:00:14 +02:00
j-g00da
1283b986df feat: carry all published relay addresses in securejoin links (#8591)
Carry all published "secondary" addresses in `r` param of the securejoin URL.

Closes: #8590
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 19:19:54 +00:00
j-g00da
33b258302b fix: RUSTSEC-2026-0258 (#8603)
https://rustsec.org/advisories/RUSTSEC-2026-0258

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 11:29:56 +00:00
holger krekel
307ff9def1 fix(rpc): avoid hang when requests race a dying rpc-server
Requests now register before testing for shutdown,
so either the reader loop or the caller answers them.
Also failed start() winds down its threads, ignoring a broken pipe on stdin.
2026-08-17 21:07:19 +02:00
holger krekel
0119db85ad test!: rename rpc fixtures to disambiguate from ffi fixtures
fixes https://github.com/chatmail/core/issues/8583
2026-08-14 16:44:50 +02:00
Hocuri
b1c3615431 chore: Add script to show the sizes of futures (async Rust) (#8536)
Add the script from
https://github.com/chatmail/core/pull/8345/changes#r3696015000 with a
few small tweaks

TODO: Add to readme
2026-08-14 14:09:10 +02:00
link2xt
aa95d87568 chore: bump version to 2.60.0-dev 2026-08-14 12:02:17 +00:00
biørn
07e18c64af sanitize version_string we got from the wire (#8582)
`version_string` is meant to be displayed by UI, and comes from the
wire.

therefore, as a general precaution, ensure a string that is
regarded as a typical version string. all versions in scope are
currently v123.456.789-shortsuffix, where suffix is a-z and mostly
unused in production. that is the base. we can adapt if there is really
a need, but not for theoretical version strings. as we do not stop
processing, things are not bad even if we missed a valid usecase herr.

moreover, if `version_string` is empty, we skip the candidate - as we
cannot display something useful to the user. that little bit of care is
expected from relays :)
2026-08-14 12:01:15 +00:00
link2xt
e322fdf157 chore(release): prepare for 2.59.0 v2.59.0 2026-08-14 11:59:48 +00:00
link2xt
3dce06b02b refactor(mimefactory): add Encryption enum
This replaces independent data structures
which allowed invalid state of having both the public keys
and the shared secret, or having a shared secret
but not encrypting the message because encryption_pubkeys
was None instead of Some(Vec::new()).
2026-08-14 11:32:33 +00:00
link2xt
40faf829d3 feat: stop creating info messages for old broadcast lists
Creating QR code or sending a message will still fail
with a shorter error, but no info message will be created anymore.
Most users should have migrated the channels by recreating them by now.

This change is needed for moving loading of the shared secret
to earlier stages of message preparation,
otherwise mimefactory will have to create these info messages
when loading the message into memory.
2026-08-14 11:32:33 +00:00
WofWca
fbbe56c8ff refactor: rename _ex() -> _ext()
"ex" means "used to be, but no longer is".
"ext" means "extended", which is the intended meaning.
"Ext" is more common not only in the Rust ecosystem but in general.
We already had several people (myself included) asking
what "ex" is supposed to mean.

To reproduce this commit, search and replace `_ex(?!\w)` -> `_ext`.
But don't change `list_transports_ex` because it's public API.
2026-08-14 14:40:43 +04:00
holger krekel
ce7c8dbca1 fix: send http requests in origin not absolute form
Absolute form is meant for proxies and for example
nginx rejects it with 400 if the host contains an underscore, breaking autoconfig discovery.
2026-08-14 12:09:24 +02:00
holger krekel
0f8c91570b feat: allow to run the test suite against underscore-domain relays
Such relays serve self-signed certificates, and are created e.g. by cmlxc deploys.
2026-08-14 12:09:24 +02:00
holger krekel
feb777f704 test: load test data through the data fixture
Relative paths only worked when running from `deltachat-rpc-client`.
2026-08-14 12:09:24 +02:00
holger krekel
28a1a1da96 chore: don't swallow but log errors in three places
helps with debugging failing (flaky) tests
2026-08-14 12:04:43 +02:00
holger krekel
7add59fa76 test: abort early if DNS to chatmail domain does not work and nicer pytest startup header 2026-08-14 11:19:12 +02:00
link2xt
e0494b0b37 feat: remove hidden headers
Unencrypted messages are no longer sent as multipart/mixed
with Message-ID header duplicated inside.
This was useful as non-standard protection
against servers that rewrite the Message-ID,
but now most messages are sent encrypted
and for them standard RFC 9788 header protection
works the same way.
2026-08-14 07:09:49 +00:00
biørn
412ed15b8b deprecate dc_chat_get_info_json() (#8580)
it is outdated and incomplete, and always was experimental.

it is not in use in any UI but to get the name of the chat in Ubuntu
Touch, i created an issue for that at
https://codeberg.org/lk108/deltatouch/issues/305

moreover it is used for python bindings as get_summary(), not sure how
much that is in use,
we can leave the API for that for now, but we should not encourage
further usage of the API

---------

Co-authored-by: adb <adb@merlinux.eu>
2026-08-13 16:56:32 +00:00
biørn
c1e961d37f feat: client version information (#8557)
> we aim to inform about updates for installations outside of any
appstore soon.
>
> there is already a PR on android at
https://github.com/deltachat/deltachat-android/pull/4582, however, the
information about "update available" is a mockup there.
>
> in general, there are 3 ideas around about how to gather the "update
available" infomation - (1) checking a central url, (2) let contacts
provide information, (3) let relay provide information. on various
one-to-one discussions, outcome is that (3) is the most reasonable way
to go.

this PR is about reading update information via IMAP metadata from the
relay.

it is up to the UI to call `get_app_version()` at a reasonable time and
frequency, see comment in the code. when called, `get_app_version()`
iterates over all known profiles and relays and checks for version
information, returning the newest for the given scope.

we do not use an event, as that is tricky wrt changes - we do not know
if other relays report later a newer version. we also do not cache
anything, to prevent bad relays avoiding us to update permanently. also
it is easier :)

<details>
<summary>outdated notes and questions</summary>

- ~~it is up to the clients to get the needed information, we could let
core filter, but it seems easy enough the other way round, and may have
debug advantages, one can iterate etc.~~ EDIT: we now filter in core,
this also makes the jsonrpc part easier, see review comments

- when is IMAP METADATA actually read? when are they ready? is that
really the correct place? i am up to change that, but beware, this is
not really my expertise, so someone else may need to take over :)
EDIT: see below, IMAP METADATA is read on connection, before fetching
starts, usually fast enough

- relay part is missing. once the format is settled and discussed
shortly here, that should be done soon as well. but this is definitely
not my expertise and needed to be done by someone else :)

- key for IMAP METADATA is `/shared/vendor/deltachat/appversions` -
shall we continue use `deltachat` for compatibility or so? `chatmail`
seems to be more correct
EDIT: we stay with the current
</details>

relay counterpart issue: https://github.com/chatmail/relay/issues/1037

cc @link2xt @Hocuri @hpk42

---------

Co-authored-by: holger krekel <holger@merlinux.eu>
2026-08-13 16:45:58 +02:00
Jagoda Estera Ślązak
1edbfa1024 refactor: Merge msg_group_left_local into msg_del_member_local (#8575)
Follow-up to #8562

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-13 14:08:27 +02:00
holger krekel
56a99c227a test: add a CI-failing check that documented sql schema matches real one
finds things like "exists in the db, but is not documented" or "documented but not in the db".
2026-08-13 12:07:15 +00:00
link2xt
31c37848ec docs: add SQL schema documentation
There is currently no place to document up to date SQL schema.
New database is initialized with src/sql/tables.sql
and then updated by migrations,
So tracking down how some column is used requires grepping the code,
looking for a migration adding it and corresponding commits.

Co-Authored-By: biørn <r10s@b44t.com>
2026-08-13 12:07:15 +00:00
link2xt
ec4d195814 fix: send MDNs to self even if MDNs are disabled
MDNs to self are used for seen status synhronization between devices.
2026-08-13 11:36:50 +00:00
dependabot[bot]
1a959c392b chore(cargo): bump bytes from 1.12.0 to 1.12.1
Bumps [bytes](https://github.com/tokio-rs/bytes) from 1.12.0 to 1.12.1.
- [Release notes](https://github.com/tokio-rs/bytes/releases)
- [Changelog](https://github.com/tokio-rs/bytes/blob/master/CHANGELOG.md)
- [Commits](https://github.com/tokio-rs/bytes/compare/v1.12.0...v1.12.1)

---
updated-dependencies:
- dependency-name: bytes
  dependency-version: 1.12.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-12 23:57:06 +00:00
dependabot[bot]
e94e33f59a chore(cargo): bump astral-tokio-tar from 0.6.3 to 0.6.4
Bumps [astral-tokio-tar](https://github.com/astral-sh/tokio-tar) from 0.6.3 to 0.6.4.
- [Release notes](https://github.com/astral-sh/tokio-tar/releases)
- [Changelog](https://github.com/astral-sh/tokio-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/tokio-tar/compare/v0.6.3...v0.6.4)

---
updated-dependencies:
- dependency-name: astral-tokio-tar
  dependency-version: 0.6.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-12 23:17:43 +00:00
link2xt
e2b0eb1fb9 chore: fix nightly clippy warnings 2026-08-12 20:56:33 +00:00
holger krekel
3363f63316 test: remove all cache-related logic in the FFI pytest plugin 2026-08-12 22:04:15 +02:00