From e48eef7e3238f5c5b2f5cda3c6112bbb97bb1a67 Mon Sep 17 00:00:00 2001 From: link2xt Date: Fri, 11 Mar 2022 23:21:59 +0000 Subject: [PATCH] Start ephemeral timer when seen status is synchronized via imap --- CHANGELOG.md | 1 + python/tests/test_account.py | 25 +++++++++++++++++++++++++ src/imap.rs | 6 ++++++ 3 files changed, 32 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd276e313..6c630925f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ### Fixes - do not delete messages without Message-IDs as duplicates #3095 - Assign replies from a different email address to the correct chat #3119 +- start ephemeral timer when seen status is synchronized via IMAP #3122 ### Changes - add more SMTP logging #3093 diff --git a/python/tests/test_account.py b/python/tests/test_account.py index dd15f03eb..6451c7868 100644 --- a/python/tests/test_account.py +++ b/python/tests/test_account.py @@ -1099,6 +1099,31 @@ class TestOnlineAccount: assert ev.data1 == ac1_clone_chat.id assert ac1_clone_message.is_in_seen + lp.sec("Send an ephemeral message from ac2 to ac1") + ac2_chat.set_ephemeral_timer(60) + ac1._evtracker.get_matching("DC_EVENT_CHAT_EPHEMERAL_TIMER_MODIFIED") + ac1._evtracker.wait_next_incoming_message() + ac1_clone._evtracker.get_matching("DC_EVENT_CHAT_EPHEMERAL_TIMER_MODIFIED") + ac1_clone._evtracker.wait_next_incoming_message() + + ac2_chat.send_text("Foobar") + ac1_message = ac1._evtracker.wait_next_incoming_message() + ac1_clone_message = ac1_clone._evtracker.wait_next_incoming_message() + assert "Ephemeral timer: 60\n" in ac1_message.get_message_info() + assert "Expires: " not in ac1_clone_message.get_message_info() + assert "Ephemeral timer: 60\n" in ac1_message.get_message_info() + assert "Expires: " not in ac1_clone_message.get_message_info() + + ac1.mark_seen_messages([ac1_message]) + assert ac1_message.is_in_seen + assert "Expires: " in ac1_message.get_message_info() + ev = ac1_clone._evtracker.get_matching("DC_EVENT_MSGS_NOTICED") + assert ev.data1 == ac1_clone_chat.id + assert ac1_clone_message.is_in_seen + # Test that the timer is started on the second device after synchronizing the seen status. + assert "Expires: " in ac1_clone_message.get_message_info() + + def test_message_override_sender_name(self, acfactory, lp): ac1, ac2 = acfactory.get_two_online_accounts() chat = acfactory.get_accepted_chat(ac1, ac2) diff --git a/src/imap.rs b/src/imap.rs index 660b98b5a..eb4762f94 100644 --- a/src/imap.rs +++ b/src/imap.rs @@ -2015,6 +2015,12 @@ async fn mark_seen_by_uid( > 0; if updated { + msg_id + .start_ephemeral_timer(context) + .await + .with_context(|| { + format!("failed to start ephemeral timer for message {}", msg_id) + })?; Ok(Some(chat_id)) } else { // Message state has not chnaged.