feat!: fire MsgRead on subsequent MDNs

BREAKING CHANGE: previously this event only fired
if message state really did just transition
from `DC_STATE_OUT_DELIVERED` to `DC_STATE_OUT_MDN_RCVD`.
Now this is only the case for `MsgRead` events
that have the newly added `first_time == true`.

Closes https://github.com/deltachat/deltachat-desktop/issues/5220.

This is also useful for channels
as it facilitates updating the post (message) read count live.

Despite the fact that it's a breaking change,
this should not be problematic in most cases
because clients mostly use this event as an "it's time to reload"
indicator.

There is a case in Delta Chat Desktop where and adjustment
will be needed:
d1fbb30979/packages/frontend/src/stores/messagelist.ts (L119-L123)
It seems that the message state could later transition
to `DC_STATE_OUT_FAILED`, so we should not uncoditionally set it
to `DC_STATE_OUT_MDN_RCVD`.

Note that this does not expose `first_time` in CFFI.
This commit is contained in:
WofWca
2026-03-12 20:34:20 +04:00
parent 80acc9d467
commit 5c1ee5dc1a
3 changed files with 25 additions and 6 deletions

View File

@@ -171,14 +171,19 @@ pub enum EventType {
msg_id: MsgId,
},
/// A single message is read by the receiver. State changed from DC_STATE_OUT_DELIVERED to
/// DC_STATE_OUT_MDN_RCVD, see dc_msg_get_state().
/// A single message is read by a receiver.
MsgRead {
/// ID of the chat which the message belongs to.
chat_id: ChatId,
/// ID of the message that was read.
msg_id: MsgId,
/// Read for the first time (e.g. by just one group member
/// / channel subscriber).
/// State changed from DC_STATE_OUT_DELIVERED to
/// DC_STATE_OUT_MDN_RCVD, see dc_msg_get_state().
first_time: bool,
},
/// A single message was deleted.