mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 09:26:29 +03:00
fix: count recipients by Intended Recipient Fingerprints
Fixes <https://github.com/chatmail/core/issues/7987>
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from deltachat_rpc_client import EventType
|
from deltachat_rpc_client import EventType
|
||||||
from deltachat_rpc_client.const import DownloadState
|
from deltachat_rpc_client.const import ChatType, DownloadState
|
||||||
from deltachat_rpc_client.rpc import JsonRpcError
|
from deltachat_rpc_client.rpc import JsonRpcError
|
||||||
|
|
||||||
|
|
||||||
@@ -357,7 +357,7 @@ def test_message_info_imap_urls(acfactory) -> None:
|
|||||||
assert f"{new_alice_addr}/INBOX" in msg_info
|
assert f"{new_alice_addr}/INBOX" in msg_info
|
||||||
|
|
||||||
|
|
||||||
def test_remove_primary_transport(acfactory) -> None:
|
def test_remove_primary_transport(acfactory, log) -> None:
|
||||||
"""Test that after removing the primary relay, Alice can still receive messages."""
|
"""Test that after removing the primary relay, Alice can still receive messages."""
|
||||||
alice, bob = acfactory.get_online_accounts(2)
|
alice, bob = acfactory.get_online_accounts(2)
|
||||||
qr = acfactory.get_account_qr()
|
qr = acfactory.get_account_qr()
|
||||||
@@ -368,7 +368,7 @@ def test_remove_primary_transport(acfactory) -> None:
|
|||||||
bob_chat = bob.create_chat(alice)
|
bob_chat = bob.create_chat(alice)
|
||||||
alice.create_chat(bob)
|
alice.create_chat(bob)
|
||||||
|
|
||||||
# Alice changes the transport.
|
log.section("Alice sets up second transport")
|
||||||
[transport1, transport2] = alice.list_transports()
|
[transport1, transport2] = alice.list_transports()
|
||||||
alice.set_config("configured_addr", transport2["addr"])
|
alice.set_config("configured_addr", transport2["addr"])
|
||||||
|
|
||||||
@@ -376,7 +376,7 @@ def test_remove_primary_transport(acfactory) -> None:
|
|||||||
msg1 = alice.wait_for_incoming_msg().get_snapshot()
|
msg1 = alice.wait_for_incoming_msg().get_snapshot()
|
||||||
assert msg1.text == "Hello!"
|
assert msg1.text == "Hello!"
|
||||||
|
|
||||||
# Alice deletes the first transport.
|
log.section("Alice removes the primary relay")
|
||||||
alice.delete_transport(transport1["addr"])
|
alice.delete_transport(transport1["addr"])
|
||||||
alice.stop_io()
|
alice.stop_io()
|
||||||
alice.start_io()
|
alice.start_io()
|
||||||
@@ -384,3 +384,5 @@ def test_remove_primary_transport(acfactory) -> None:
|
|||||||
bob_chat.send_text("Hello again!")
|
bob_chat.send_text("Hello again!")
|
||||||
msg2 = alice.wait_for_incoming_msg().get_snapshot()
|
msg2 = alice.wait_for_incoming_msg().get_snapshot()
|
||||||
assert msg2.text == "Hello again!"
|
assert msg2.text == "Hello again!"
|
||||||
|
assert msg2.chat.get_basic_snapshot().chat_type == ChatType.SINGLE
|
||||||
|
assert msg2.chat == alice.create_chat(bob)
|
||||||
|
|||||||
@@ -1322,6 +1322,25 @@ async fn decide_chat_assignment(
|
|||||||
// no database row and ChatId yet.
|
// no database row and ChatId yet.
|
||||||
let mut num_recipients = 0;
|
let mut num_recipients = 0;
|
||||||
let mut has_self_addr = false;
|
let mut has_self_addr = false;
|
||||||
|
|
||||||
|
if let Some((sender_fingerprint, intended_recipient_fingerprints)) = mime_parser
|
||||||
|
.signature
|
||||||
|
.as_ref()
|
||||||
|
.filter(|(_sender_fingerprint, fps)| !fps.is_empty())
|
||||||
|
{
|
||||||
|
// The message is signed and has intended recipient fingerprints.
|
||||||
|
|
||||||
|
// If the message has intended recipient fingerprint and is not trashed already,
|
||||||
|
// then it is intended for us.
|
||||||
|
has_self_addr = true;
|
||||||
|
|
||||||
|
num_recipients = intended_recipient_fingerprints
|
||||||
|
.iter()
|
||||||
|
.filter(|fp| *fp != sender_fingerprint)
|
||||||
|
.count();
|
||||||
|
} else {
|
||||||
|
// Message has no intended recipient fingerprints
|
||||||
|
// or is not signed, count the `To` field recipients.
|
||||||
for recipient in &mime_parser.recipients {
|
for recipient in &mime_parser.recipients {
|
||||||
has_self_addr |= context.is_self_addr(&recipient.addr).await?;
|
has_self_addr |= context.is_self_addr(&recipient.addr).await?;
|
||||||
if addr_cmp(&recipient.addr, &mime_parser.from.addr) {
|
if addr_cmp(&recipient.addr, &mime_parser.from.addr) {
|
||||||
@@ -1332,6 +1351,7 @@ async fn decide_chat_assignment(
|
|||||||
if from_id != ContactId::SELF && !has_self_addr {
|
if from_id != ContactId::SELF && !has_self_addr {
|
||||||
num_recipients += 1;
|
num_recipients += 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
let mut can_be_11_chat_log = String::new();
|
let mut can_be_11_chat_log = String::new();
|
||||||
let mut l = |cond: bool, s: String| {
|
let mut l = |cond: bool, s: String| {
|
||||||
can_be_11_chat_log += &s;
|
can_be_11_chat_log += &s;
|
||||||
|
|||||||
Reference in New Issue
Block a user