Skip to content

Commit e37920e

Browse files
committed
feat: No implicit member changes from old Delta Chat clients (#7220)
Old Delta Chat clients don't provide timestamps for added and removed members in messages, so at least implicit member changes may be ignored as it's not clear if they are newer than explicit member changes from modern clients. Lost messages aren't so frequent anyway, and overall compatibility with old versions may be limited already.
1 parent 6a7466d commit e37920e

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

src/receive_imf.rs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2864,15 +2864,6 @@ async fn apply_group_changes(
28642864
let (mut removed_id, mut added_id) = (None, None);
28652865
let mut better_msg = None;
28662866
let mut silent = false;
2867-
2868-
// True if a Delta Chat client has explicitly added our current primary address.
2869-
let self_added =
2870-
if let Some(added_addr) = mime_parser.get_header(HeaderDef::ChatGroupMemberAdded) {
2871-
addr_cmp(&context.get_primary_self_addr().await?, added_addr)
2872-
} else {
2873-
false
2874-
};
2875-
28762867
let chat_contacts =
28772868
HashSet::<ContactId>::from_iter(chat::get_chat_contacts(context, chat.id).await?);
28782869
let is_from_in_chat =
@@ -3002,6 +2993,15 @@ async fn apply_group_changes(
30022993
.await?;
30032994
} else {
30042995
let mut new_members: HashSet<ContactId>;
2996+
// True if a Delta Chat client has explicitly and really added our primary address to an
2997+
// already existing group.
2998+
let self_added =
2999+
if let Some(added_addr) = mime_parser.get_header(HeaderDef::ChatGroupMemberAdded) {
3000+
addr_cmp(&context.get_primary_self_addr().await?, added_addr)
3001+
&& !chat_contacts.contains(&ContactId::SELF)
3002+
} else {
3003+
false
3004+
};
30053005
if self_added {
30063006
new_members = HashSet::from_iter(to_ids_flat.iter().copied());
30073007
new_members.insert(ContactId::SELF);
@@ -3068,10 +3068,9 @@ async fn apply_group_changes(
30683068
.collect();
30693069

30703070
if let Some(added_id) = added_id {
3071-
if !added_ids.remove(&added_id) && !self_added {
3072-
// No-op "Member added" message.
3073-
//
3074-
// Trash it.
3071+
if !added_ids.remove(&added_id) && added_id != ContactId::SELF {
3072+
// No-op "Member added" message. An exception is self-addition messages because they at
3073+
// least must be shown when a chat is created on our side.
30753074
better_msg = Some(String::new());
30763075
}
30773076
}

0 commit comments

Comments
 (0)