diff --git a/python/tests/test_0_complex_or_slow.py b/python/tests/test_0_complex_or_slow.py index 6d436e54b..854bfd2cf 100644 --- a/python/tests/test_0_complex_or_slow.py +++ b/python/tests/test_0_complex_or_slow.py @@ -288,6 +288,7 @@ def test_use_new_verified_group_after_going_online(acfactory, data, tmp_path, lp assert open(contact.get_profile_image(), "rb").read() == open(avatar_path, "rb").read() lp.sec("ac2_offl: sending message") + chat2.accept() msg_out = chat2.send_text("hello") lp.sec("ac1: receiving message") diff --git a/src/chat/chat_tests.rs b/src/chat/chat_tests.rs index 76cbc131c..57a96bb8d 100644 --- a/src/chat/chat_tests.rs +++ b/src/chat/chat_tests.rs @@ -3768,14 +3768,7 @@ async fn test_leave_broadcast_multidevice() -> Result<()> { // The contact should be marked as verified. check_direct_chat_is_hidden_and_contact_is_verified(alice, bob0).await; check_direct_chat_is_hidden_and_contact_is_verified(bob0, alice).await; - - // TODO: There is a known bug in `observe_securejoin_on_other_device()`: - // When Bob joins a group or broadcast with his first device, - // then a chat with Alice will pop up on his second device. - // When it's fixed, the 2 following lines can be replaced with - // `check_direct_chat_is_hidden_and_contact_is_verified(bob1, alice).await;` - let bob1_alice_contact = bob1.add_or_lookup_contact_no_key(alice).await; - assert!(bob1_alice_contact.is_verified(bob1).await.unwrap()); + check_direct_chat_is_hidden_and_contact_is_verified(bob1, alice).await; tcm.section("Alice sends first message to broadcast."); let sent_msg = alice.send_text(alice_chat_id, "Hello!").await; diff --git a/src/receive_imf.rs b/src/receive_imf.rs index 4aadc0f1e..563f271cf 100644 --- a/src/receive_imf.rs +++ b/src/receive_imf.rs @@ -3562,7 +3562,14 @@ async fn create_or_lookup_mailinglist_or_broadcast( chattype, &listid, name, - create_blocked, + if chattype == Chattype::InBroadcast { + // If we joined the broadcast, we have scanned a QR code. + // Even if 1:1 chat does not exist or is in a contact request, + // create the channel as unblocked. + Blocked::Not + } else { + create_blocked + }, param, mime_parser.timestamp_sent, ) diff --git a/src/securejoin.rs b/src/securejoin.rs index cd36eea25..5c50f067b 100644 --- a/src/securejoin.rs +++ b/src/securejoin.rs @@ -839,7 +839,11 @@ pub(crate) async fn observe_securejoin_on_other_device( inviter_progress(context, contact_id, chat_id, chat_type)?; } - if matches!(step, SecureJoinStep::RequestWithAuth) { + if matches!(step, SecureJoinStep::RequestWithAuth) + && mime_message + .get_header(HeaderDef::SecureJoin) + .is_some_and(|s| s.starts_with("vc-")) + { // This actually reflects what happens on the first device (which does the secure // join) and causes a subsequent "vg-member-added" message to create an unblocked // verified group.