Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] feat!: Show a ~ in front of contact names if the name wasn't explicitly set #6411

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/chatlist.rs
Original file line number Diff line number Diff line change
Expand Up @@ -661,7 +661,7 @@ mod tests {
let contacts = get_chat_contacts(&t, chat_id).await?;
let contact_id = *contacts.first().unwrap();
let chat = Chat::load_from_db(&t, chat_id).await?;
assert_eq!(chat.get_name(), "Bob Authname");
assert_eq!(chat.get_name(), "~Bob Authname");

// check, the one-to-one-chat can be found using chatlist search query
let chats = Chatlist::try_load(&t, 0, Some("bob authname"), None).await?;
Expand All @@ -682,7 +682,7 @@ mod tests {
let test_id = Contact::create(&t, "", "bob@example.org").await?;
assert_eq!(contact_id, test_id);
let chat = Chat::load_from_db(&t, chat_id).await?;
assert_eq!(chat.get_name(), "Bob Authname");
assert_eq!(chat.get_name(), "~Bob Authname");
let chats = Chatlist::try_load(&t, 0, Some("bob authname"), None).await?;
assert_eq!(chats.len(), 1);
let chats = Chatlist::try_load(&t, 0, Some("bob nickname"), None).await?;
Expand Down
44 changes: 22 additions & 22 deletions src/contact.rs
Original file line number Diff line number Diff line change
Expand Up @@ -921,7 +921,7 @@ impl Contact {
let chat_name = if !name.is_empty() {
name
} else if !authname.is_empty() {
authname
format!("~{}", authname)
} else {
addr
};
Expand Down Expand Up @@ -1365,14 +1365,14 @@ impl Contact {
///
/// This name is typically used in lists.
/// To get the name editable in a formular, use `Contact::get_name`.
pub fn get_display_name(&self) -> &str {
pub fn get_display_name(&self) -> String {
if !self.name.is_empty() {
return &self.name;
return self.name.clone();
}
if !self.authname.is_empty() {
return &self.authname;
return format!("~{}", self.authname);
}
&self.addr
self.addr.clone()
}

/// Get a summary of authorized name and address.
Expand Down Expand Up @@ -1404,7 +1404,7 @@ impl Contact {
if !self.name.is_empty() {
format!("{} ({})", self.name, self.addr)
} else if !self.authname.is_empty() {
format!("{} ({})", self.authname, self.addr)
format!("~{} ({})", self.authname, self.addr)
} else {
(&self.addr).into()
}
Expand Down Expand Up @@ -2053,7 +2053,7 @@ mod tests {
let contact = Contact::get_by_id(&context.ctx, id).await.unwrap();
assert_eq!(contact.get_name(), "");
assert_eq!(contact.get_authname(), "bob");
assert_eq!(contact.get_display_name(), "bob");
assert_eq!(contact.get_display_name(), "~bob");

// Search by name.
let contacts = Contact::get_all(&context.ctx, 0, Some("bob")).await?;
Expand Down Expand Up @@ -2185,7 +2185,7 @@ mod tests {
assert_eq!(contact_id, contact_id_test);
assert_eq!(sth_modified, Modifier::Modified);
let contact = Contact::get_by_id(&t, contact_id).await.unwrap();
assert_eq!(contact.get_name_n_addr(), "m. serious (three@drei.sam)");
assert_eq!(contact.get_name_n_addr(), "~m. serious (three@drei.sam)");
assert!(!contact.is_blocked());

// manually edit name of third contact (does not changed authorized name)
Expand Down Expand Up @@ -2276,14 +2276,14 @@ mod tests {
)
.await?;
let chat_id = t.get_last_msg().await.get_chat_id();
assert_eq!(Chat::load_from_db(&t, chat_id).await?.name, "Flobbyfoo");
assert_eq!(Chat::load_from_db(&t, chat_id).await?.name, "~Flobbyfoo");
let chatlist = Chatlist::try_load(&t, 0, Some("flobbyfoo"), None).await?;
assert_eq!(chatlist.len(), 1);
let contact = Contact::get_by_id(&t, *contact_id).await?;
assert_eq!(contact.get_authname(), "Flobbyfoo");
assert_eq!(contact.get_name(), "");
assert_eq!(contact.get_display_name(), "Flobbyfoo");
assert_eq!(contact.get_name_n_addr(), "Flobbyfoo (f@example.org)");
assert_eq!(contact.get_display_name(), "~Flobbyfoo");
assert_eq!(contact.get_name_n_addr(), "~Flobbyfoo (f@example.org)");
let contacts = Contact::get_all(&t, 0, Some("f@example.org")).await?;
assert_eq!(contacts.len(), 1);
let contacts = Contact::get_all(&t, 0, Some("flobbyfoo")).await?;
Expand All @@ -2304,16 +2304,16 @@ mod tests {
)
.await?;
let chat_id = t.get_last_msg().await.get_chat_id();
assert_eq!(Chat::load_from_db(&t, chat_id).await?.name, "Foo Flobby");
assert_eq!(Chat::load_from_db(&t, chat_id).await?.name, "~Foo Flobby");
let chatlist = Chatlist::try_load(&t, 0, Some("Flobbyfoo"), None).await?;
assert_eq!(chatlist.len(), 0);
let chatlist = Chatlist::try_load(&t, 0, Some("Foo Flobby"), None).await?;
assert_eq!(chatlist.len(), 1);
let contact = Contact::get_by_id(&t, *contact_id).await?;
assert_eq!(contact.get_authname(), "Foo Flobby");
assert_eq!(contact.get_name(), "");
assert_eq!(contact.get_display_name(), "Foo Flobby");
assert_eq!(contact.get_name_n_addr(), "Foo Flobby (f@example.org)");
assert_eq!(contact.get_display_name(), "~Foo Flobby");
assert_eq!(contact.get_name_n_addr(), "~Foo Flobby (f@example.org)");
let contacts = Contact::get_all(&t, 0, Some("f@example.org")).await?;
assert_eq!(contacts.len(), 1);
let contacts = Contact::get_all(&t, 0, Some("flobbyfoo")).await?;
Expand Down Expand Up @@ -2439,7 +2439,7 @@ mod tests {
let contact = Contact::get_by_id(&t, contact_id).await.unwrap();
assert_eq!(contact.get_authname(), "bob1");
assert_eq!(contact.get_name(), "");
assert_eq!(contact.get_display_name(), "bob1");
assert_eq!(contact.get_display_name(), "~bob1");

// incoming mail `From: bob2 <bob@example.org>` - this should update authname
let (contact_id, sth_modified) = Contact::add_or_lookup(
Expand All @@ -2455,7 +2455,7 @@ mod tests {
let contact = Contact::get_by_id(&t, contact_id).await.unwrap();
assert_eq!(contact.get_authname(), "bob2");
assert_eq!(contact.get_name(), "");
assert_eq!(contact.get_display_name(), "bob2");
assert_eq!(contact.get_display_name(), "~bob2");

// manually edit name to "bob3" - authname should be still be "bob2" as given in `From:` above
let contact_id = Contact::create(&t, "bob3", "bob@example.org")
Expand Down Expand Up @@ -2510,7 +2510,7 @@ mod tests {
let contact = Contact::get_by_id(&t, contact_id).await.unwrap();
assert_eq!(contact.get_authname(), "claire1");
assert_eq!(contact.get_name(), "");
assert_eq!(contact.get_display_name(), "claire1");
assert_eq!(contact.get_display_name(), "~claire1");

// incoming mail `From: claire2 <claire@example.org>` - this should update authname
let (contact_id_same, sth_modified) = Contact::add_or_lookup(
Expand All @@ -2526,7 +2526,7 @@ mod tests {
let contact = Contact::get_by_id(&t, contact_id).await.unwrap();
assert_eq!(contact.get_authname(), "claire2");
assert_eq!(contact.get_name(), "");
assert_eq!(contact.get_display_name(), "claire2");
assert_eq!(contact.get_display_name(), "~claire2");
}

/// Regression test.
Expand All @@ -2547,7 +2547,7 @@ mod tests {
.await?;
assert_eq!(sth_modified, Modifier::Created);
let contact = Contact::get_by_id(&t, contact_id).await?;
assert_eq!(contact.get_display_name(), "Bob");
assert_eq!(contact.get_display_name(), "~Bob");

// Incoming message from someone else with "Not Bob" <bob@example.org> in the "To:" field.
let (contact_id_same, sth_modified) = Contact::add_or_lookup(
Expand All @@ -2560,7 +2560,7 @@ mod tests {
assert_eq!(contact_id, contact_id_same);
assert_eq!(sth_modified, Modifier::Modified);
let contact = Contact::get_by_id(&t, contact_id).await?;
assert_eq!(contact.get_display_name(), "Not Bob");
assert_eq!(contact.get_display_name(), "~Not Bob");

// Incoming message from Bob, changing the name back.
let (contact_id_same, sth_modified) = Contact::add_or_lookup(
Expand All @@ -2573,7 +2573,7 @@ mod tests {
assert_eq!(contact_id, contact_id_same);
assert_eq!(sth_modified, Modifier::Modified); // This was None until the bugfix
let contact = Contact::get_by_id(&t, contact_id).await?;
assert_eq!(contact.get_display_name(), "Bob");
assert_eq!(contact.get_display_name(), "~Bob");

Ok(())
}
Expand Down Expand Up @@ -2610,7 +2610,7 @@ mod tests {
let contact = Contact::get_by_id(&t, contact_id).await.unwrap();
assert_eq!(contact.get_authname(), "dave2");
assert_eq!(contact.get_name(), "");
assert_eq!(contact.get_display_name(), "dave2");
assert_eq!(contact.get_display_name(), "~dave2");
}

#[test]
Expand Down
2 changes: 1 addition & 1 deletion src/events/chatlist_events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ mod test_chatlist_events {
.await;
bob.recv_msg(&sent_msg).await;
let alice_on_bob = bob.add_or_lookup_contact(&alice).await;
assert!(alice_on_bob.get_display_name() == "Alice");
assert_eq!(alice_on_bob.get_display_name(), "~Alice");

wait_for_chatlist_all_items(&bob).await;

Expand Down
18 changes: 9 additions & 9 deletions src/message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ impl MsgId {
let name = from_contact.get_name_n_addr();
if let Some(override_sender_name) = msg.get_override_sender_name() {
let addr = from_contact.get_addr();
ret += &format!(" by ~{override_sender_name} ({addr})");
ret += &format!(" by {override_sender_name} ({addr})");
} else {
ret += &format!(" by {name}");
}
Expand Down Expand Up @@ -895,7 +895,7 @@ impl Message {
pub fn get_override_sender_name(&self) -> Option<String> {
self.param
.get(Param::OverrideSenderDisplayname)
.map(|name| name.to_string())
.map(|name| format!("~{name}"))
}

// Exposing this function over the ffi instead of get_override_sender_name() would mean that at least Android Java code has
Expand Down Expand Up @@ -2437,10 +2437,10 @@ mod tests {
msg.set_override_sender_name(Some("over ride".to_string()));
assert_eq!(
msg.get_override_sender_name(),
Some("over ride".to_string())
Some("~over ride".to_string())
);
assert_eq!(msg.get_sender_name(&contact), "over ride".to_string());
assert_ne!(contact.get_display_name(), "over ride".to_string());
assert_eq!(msg.get_sender_name(&contact), "~over ride".to_string());
assert_ne!(contact.get_display_name(), "~over ride".to_string());
chat::send_msg(&alice, chat.id, &mut msg).await.unwrap();
let sent_msg = alice.pop_sent_msg().await;

Expand All @@ -2457,10 +2457,10 @@ mod tests {
assert_eq!(msg.text, "bla blubb");
assert_eq!(
msg.get_override_sender_name(),
Some("over ride".to_string())
Some("~over ride".to_string())
);
assert_eq!(msg.get_sender_name(&contact), "over ride".to_string());
assert_ne!(contact.get_display_name(), "over ride".to_string());
assert_eq!(msg.get_sender_name(&contact), "~over ride".to_string());
assert_ne!(contact.get_display_name(), "~over ride".to_string());

// explicitly check that the message does not create a mailing list
// (mailing lists may also use `Sender:`-header)
Expand All @@ -2471,7 +2471,7 @@ mod tests {
let msg = alice2.recv_msg(&sent_msg).await;
assert_eq!(
msg.get_override_sender_name(),
Some("over ride".to_string())
Some("~over ride".to_string())
);
}

Expand Down
2 changes: 1 addition & 1 deletion src/peerstate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -664,7 +664,7 @@ impl Peerstate {
let old_contact = Contact::get_by_id(context, contact_id).await?;
stock_str::aeap_addr_changed(
context,
old_contact.get_display_name(),
&old_contact.get_display_name(),
&self.addr,
new_addr,
)
Expand Down
6 changes: 3 additions & 3 deletions src/reaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -731,7 +731,7 @@ Here's my footer -- bob@example.net"
assert_eq!(summary.state, MessageState::InFresh); // state refers to message, not to reaction
assert!(summary.prefix.is_none());
assert!(summary.thumbnail_path.is_none());
assert_summary(&alice, "BOB reacted 👍 to \"Party?\"").await;
assert_summary(&alice, "~BOB reacted 👍 to \"Party?\"").await;

// Alice reacts to own message as well
SystemTime::shift(Duration::from_secs(10));
Expand All @@ -742,7 +742,7 @@ Here's my footer -- bob@example.net"
expect_no_unwanted_events(&bob).await;

assert_summary(&alice, "You reacted 🍿 to \"Party?\"").await;
assert_summary(&bob, "ALICE reacted 🍿 to \"Party?\"").await;
assert_summary(&bob, "~ALICE reacted 🍿 to \"Party?\"").await;

// Alice sends a newer message, this overwrites reaction summaries
SystemTime::shift(Duration::from_secs(10));
Expand All @@ -759,7 +759,7 @@ Here's my footer -- bob@example.net"
bob.recv_msg_opt(&alice_send_reaction).await;

assert_summary(&alice, "You reacted 🤘 to \"Party?\"").await;
assert_summary(&bob, "ALICE reacted 🤘 to \"Party?\"").await;
assert_summary(&bob, "~ALICE reacted 🤘 to \"Party?\"").await;

// Retracted reactions remove all summary reactions
SystemTime::shift(Duration::from_secs(10));
Expand Down
22 changes: 11 additions & 11 deletions src/receive_imf/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ async fn test_adhoc_group_show_accepted_contact_accepted() {
chat_id.accept(&t).await.unwrap();
let chat = chat::Chat::load_from_db(&t, chat_id).await.unwrap();
assert_eq!(chat.typ, Chattype::Single);
assert_eq!(chat.name, "Bob");
assert_eq!(chat.name, "~Bob");
assert_eq!(chat::get_chat_contacts(&t, chat_id).await.unwrap().len(), 1);
assert_eq!(chat::get_chat_msgs(&t, chat_id).await.unwrap().len(), 1);

Expand Down Expand Up @@ -584,7 +584,7 @@ async fn test_escaped_recipients() {
.unwrap();
let contact = Contact::get_by_id(&t, carl_contact_id).await.unwrap();
assert_eq!(contact.get_name(), "");
assert_eq!(contact.get_display_name(), "h2");
assert_eq!(contact.get_display_name(), "~h2");

let chats = Chatlist::try_load(&t, 0, None, None).await.unwrap();
let msg = Message::load_from_db(&t, chats.get_msg_id(0).unwrap().unwrap())
Expand Down Expand Up @@ -631,7 +631,7 @@ async fn test_cc_to_contact() {
.unwrap();
let contact = Contact::get_by_id(&t, carl_contact_id).await.unwrap();
assert_eq!(contact.get_name(), "");
assert_eq!(contact.get_display_name(), "Carl");
assert_eq!(contact.get_display_name(), "~Carl");
}

#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
Expand Down Expand Up @@ -1011,8 +1011,8 @@ async fn test_github_mailing_list() -> Result<()> {
let contact2 = Contact::get_by_id(&t.ctx, msg2.from_id).await?;
assert_eq!(contact2.get_addr(), "notifications@github.com");

assert_eq!(msg1.get_override_sender_name().unwrap(), "Max Mustermann");
assert_eq!(msg2.get_override_sender_name().unwrap(), "Github");
assert_eq!(msg1.get_override_sender_name().unwrap(), "~Max Mustermann");
assert_eq!(msg2.get_override_sender_name().unwrap(), "~Github");
Ok(())
}

Expand Down Expand Up @@ -2077,7 +2077,7 @@ async fn check_alias_reply(from_dc: bool, chat_request: bool, group_request: boo
}
assert_eq!(
answer.get_override_sender_name().unwrap(),
"bob@example.net"
"~bob@example.net"
); // Bob is not part of the group, so override-sender-name should be set

// Check that Claire also gets the message in the same chat.
Expand All @@ -2089,7 +2089,7 @@ async fn check_alias_reply(from_dc: bool, chat_request: bool, group_request: boo
assert_eq!(answer.chat_id, request.chat_id);
assert_eq!(
answer.get_override_sender_name().unwrap(),
"bob@example.net"
"~bob@example.net"
);
}

Expand Down Expand Up @@ -2313,20 +2313,20 @@ Second signature";
receive_imf(&alice, first_message, false).await?;
let contact = Contact::get_by_id(&alice, bob_contact_id).await?;
assert_eq!(contact.get_status(), "First signature");
assert_eq!(contact.get_display_name(), "Bob1");
assert_eq!(contact.get_display_name(), "~Bob1");

receive_imf(&alice, second_message, false).await?;
let contact = Contact::get_by_id(&alice, bob_contact_id).await?;
assert_eq!(contact.get_status(), "Second signature");
assert_eq!(contact.get_display_name(), "Bob2");
assert_eq!(contact.get_display_name(), "~Bob2");

// Duplicate message, should be ignored
receive_imf(&alice, first_message, false).await?;

// No change because last message is duplicate of the first.
let contact = Contact::get_by_id(&alice, bob_contact_id).await?;
assert_eq!(contact.get_status(), "Second signature");
assert_eq!(contact.get_display_name(), "Bob2");
assert_eq!(contact.get_display_name(), "~Bob2");

Ok(())
}
Expand Down Expand Up @@ -5230,7 +5230,7 @@ async fn test_list_from() -> Result<()> {
let raw = include_bytes!("../../test-data/message/list-from.eml");
let received = receive_imf(t, raw, false).await?.unwrap();
let msg = Message::load_from_db(t, *received.msg_ids.last().unwrap()).await?;
assert_eq!(msg.get_override_sender_name().unwrap(), "ÖAMTC");
assert_eq!(msg.get_override_sender_name().unwrap(), "~ÖAMTC");
let sender_contact = Contact::get_by_id(t, msg.from_id).await?;
assert_eq!(
sender_contact.get_display_name(),
Expand Down
2 changes: 1 addition & 1 deletion src/stock_str.rs
Original file line number Diff line number Diff line change
Expand Up @@ -822,7 +822,7 @@ pub(crate) async fn secure_join_started(
translated(context, StockMessage::SecureJoinStarted)
.await
.replace1(&contact.get_name_n_addr())
.replace2(contact.get_display_name())
.replace2(&contact.get_display_name())
} else {
format!("secure_join_started: unknown contact {inviter_contact_id}")
}
Expand Down
2 changes: 1 addition & 1 deletion src/test_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -770,7 +770,7 @@ impl TestContext {
} else {
assert_eq!(
actual, expected,
"To update the expected value, run `UPDATE_GOLDEN_TESTS=1 cargo test`"
"To update the expected value, run `UPDATE_GOLDEN_TESTS=1 cargo nextest run`"
);
}
}
Expand Down
3 changes: 2 additions & 1 deletion src/tests/aeap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,8 @@ async fn check_that_transition_worked(

let info_msg = get_last_info_msg(bob, *group).await.unwrap();
let expected_text =
stock_str::aeap_addr_changed(bob, name, old_alice_addr, new_alice_addr).await;
stock_str::aeap_addr_changed(bob, &format!("{name}"), old_alice_addr, new_alice_addr)
.await;
assert_eq!(info_msg.text, expected_text);
assert_eq!(info_msg.from_id, ContactId::INFO);

Expand Down
Loading
Loading