From db56e69d4bdc27230f816a644124e0bb4a57c66a Mon Sep 17 00:00:00 2001 From: iequidoo Date: Tue, 16 Sep 2025 03:55:31 -0300 Subject: [PATCH] feat: Don't mark MDNs as IMAP-seen Marking MDNs as seen is useless, they shouldn't be displayed by any MUA. --- deltachat-rpc-client/tests/test_folders.py | 15 +++++++-------- python/tests/test_1_online.py | 15 +++++++++------ src/receive_imf.rs | 5 ----- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/deltachat-rpc-client/tests/test_folders.py b/deltachat-rpc-client/tests/test_folders.py index 85cd8e110..5cc3f1502 100644 --- a/deltachat-rpc-client/tests/test_folders.py +++ b/deltachat-rpc-client/tests/test_folders.py @@ -68,12 +68,11 @@ def test_markseen_message_and_mdn(acfactory, direct_imap): msg.mark_seen() rex = re.compile("Marked messages [0-9]+ in folder INBOX as seen.") - - for ac in ac1, ac2: - while True: - event = ac.wait_for_event() - if event.kind == EventType.INFO and rex.search(event.msg): - break + while True: + event = ac2.wait_for_event() + if event.kind == EventType.INFO and rex.search(event.msg): + break + ac1.wait_for_msg(EventType.MSGS_CHANGED) ac1_direct_imap = direct_imap(ac1) ac2_direct_imap = direct_imap(ac2) @@ -81,8 +80,8 @@ def test_markseen_message_and_mdn(acfactory, direct_imap): ac1_direct_imap.select_folder("INBOX") ac2_direct_imap.select_folder("INBOX") - # Check that the mdn is marked as seen - assert len(list(ac1_direct_imap.conn.fetch(AND(seen=True), mark_seen=False))) == 1 + # Check that the MDN isn't marked as seen. + assert len(list(ac1_direct_imap.conn.fetch(AND(seen=True), mark_seen=False))) == 0 # Check original message is marked as seen assert len(list(ac2_direct_imap.conn.fetch(AND(seen=True), mark_seen=False))) == 1 diff --git a/python/tests/test_1_online.py b/python/tests/test_1_online.py index 236da0cea..35f2a4776 100644 --- a/python/tests/test_1_online.py +++ b/python/tests/test_1_online.py @@ -419,9 +419,6 @@ def test_send_and_receive_message_markseen(acfactory, lp): assert ev.data2 > dc.const.DC_MSG_ID_LAST_SPECIAL lp.step("2") - # Check that ac1 marks the read receipt as read. - ac1._evtracker.get_info_contains("Marked messages .* in folder INBOX as seen.") - assert msg1.is_out_mdn_received() assert msg3.is_out_mdn_received() @@ -506,11 +503,16 @@ def test_mdn_asymmetric(acfactory, lp): ac1.set_config("mdns_enabled", "1") ac2.set_config("mdns_enabled", "1") + ac1.set_config("bcc_self", "1") + lp.sec("sending text message from ac1 to ac2") msg_out = chat.send_text("message1") assert len(chat.get_messages()) == 1 + E2EE_INFO_MSGS + # Wait for the message to be marked as seen on IMAP. + ac1._evtracker.get_info_contains("Marked messages [0-9]+ in folder INBOX as seen.") + lp.sec("disable ac1 MDNs") ac1.set_config("mdns_enabled", "0") @@ -522,13 +524,14 @@ def test_mdn_asymmetric(acfactory, lp): lp.sec("ac2: mark incoming message as seen") ac2.mark_seen_messages([msg]) + # Wait for the message to be marked as seen on IMAP. + ac2._evtracker.get_info_contains("Marked messages [0-9]+ in folder INBOX as seen.") + lp.sec("ac1: waiting for incoming activity") assert len(chat.get_messages()) == 1 + E2EE_INFO_MSGS - # Wait for the message to be marked as seen on IMAP. - ac1._evtracker.get_info_contains("Marked messages [0-9]+ in folder INBOX as seen.") - # MDN is received even though MDNs are already disabled + ac1._evtracker.get_matching("DC_EVENT_MSG_READ") assert msg_out.is_out_mdn_received() diff --git a/src/receive_imf.rs b/src/receive_imf.rs index bd3b223fe..e73ddbdd3 100644 --- a/src/receive_imf.rs +++ b/src/receive_imf.rs @@ -930,11 +930,6 @@ UPDATE config SET value=? WHERE keyname='configured_addr' AND value!=?1 .await?; context.scheduler.interrupt_inbox().await; } - if target.is_none() && !mime_parser.mdn_reports.is_empty() && mime_parser.has_chat_version() - { - // This is a Delta Chat MDN. Mark as read. - markseen_on_imap_table(context, rfc724_mid_orig).await?; - } if !mime_parser.incoming && !context.get_config_bool(Config::TeamProfile).await? { let mut updated_chats = BTreeMap::new(); let mut archived_chats_maybe_noticed = false;