diff --git a/deltachat-ffi/deltachat.h b/deltachat-ffi/deltachat.h index e05b97a26..737d614fd 100644 --- a/deltachat-ffi/deltachat.h +++ b/deltachat-ffi/deltachat.h @@ -3743,8 +3743,9 @@ int dc_chat_can_send (const dc_chat_t* chat); * if `verified_one_on_one_chats` setting is enabled. * * UI should display a green checkmark - * in the chat title and + * in the chat title, * in the chatlist item + * and in the chat profile * if chat protection is enabled. * * @memberof dc_chat_t @@ -5052,12 +5053,9 @@ int dc_contact_is_blocked (const dc_contact_t* contact); * * If contact is verified * UI should display green checkmark after the contact name - * in contact list items and - * in chat member list items. - * - * Do not use this function when displaying the contact profile view. - * Display green checkmark in the title of the contact profile - * if dc_contact_profile_is_verified() returns true. + * in contact list items, + * in chat member list items + * and in profiles if no chat with the contact exist (otherwise, use dc_chat_is_protected()). * * @memberof dc_contact_t * @param contact The contact object. @@ -5067,24 +5065,6 @@ int dc_contact_is_blocked (const dc_contact_t* contact); int dc_contact_is_verified (dc_contact_t* contact); -/** - * Check if the contact profile title - * should contain a green checkmark. - * This indicates whether 1:1 chat with - * this contact has a green checkmark - * or will have if such chat is created. - * - * Use dc_contact_get_verified_id to display the verifier contact - * in the info section of the contact profile. - * - * @memberof dc_contact_t - * @param contact The contact object. - * @return 1=contact profile has a green checkmark in the title, - * 0=contact profile has no green checkmark in the title. - */ -int dc_contact_profile_is_verified (dc_contact_t* contact); - - /** * Return the contact ID that verified a contact. * diff --git a/deltachat-ffi/src/lib.rs b/deltachat-ffi/src/lib.rs index ef7ccc166..081e7198a 100644 --- a/deltachat-ffi/src/lib.rs +++ b/deltachat-ffi/src/lib.rs @@ -4119,21 +4119,6 @@ pub unsafe extern "C" fn dc_contact_is_verified(contact: *mut dc_contact_t) -> l .unwrap_or_default() as libc::c_int } -#[no_mangle] -pub unsafe extern "C" fn dc_contact_profile_is_verified(contact: *mut dc_contact_t) -> libc::c_int { - if contact.is_null() { - eprintln!("ignoring careless call to dc_contact_profile_is_verified()"); - return 0; - } - let ffi_contact = &*contact; - let ctx = &*ffi_contact.context; - - block_on(ffi_contact.contact.is_profile_verified(ctx)) - .context("is_profile_verified failed") - .log_err(ctx) - .unwrap_or_default() as libc::c_int -} - #[no_mangle] pub unsafe extern "C" fn dc_contact_get_verifier_id(contact: *mut dc_contact_t) -> u32 { if contact.is_null() { diff --git a/deltachat-jsonrpc/src/api/types/contact.rs b/deltachat-jsonrpc/src/api/types/contact.rs index c9e3ef79f..c5676aba7 100644 --- a/deltachat-jsonrpc/src/api/types/contact.rs +++ b/deltachat-jsonrpc/src/api/types/contact.rs @@ -24,8 +24,9 @@ pub struct ContactObject { /// /// If this is true /// UI should display green checkmark after the contact name - /// in contact list items and - /// in chat member list items. + /// in contact list items, + /// in chat member list items + /// and in profiles if no chat with the contact exist. is_verified: bool, /// True if the contact profile title should have a green checkmark. diff --git a/deltachat-rpc-client/tests/test_securejoin.py b/deltachat-rpc-client/tests/test_securejoin.py index e66a1d6c3..8b189bfcc 100644 --- a/deltachat-rpc-client/tests/test_securejoin.py +++ b/deltachat-rpc-client/tests/test_securejoin.py @@ -19,7 +19,6 @@ def test_qr_setup_contact(acfactory) -> None: alice_contact_bob = alice.get_contact_by_addr(bob.get_config("addr")) alice_contact_bob_snapshot = alice_contact_bob.get_snapshot() assert alice_contact_bob_snapshot.is_verified - assert alice_contact_bob_snapshot.is_profile_verified while True: event = bob.wait_for_event() @@ -30,7 +29,6 @@ def test_qr_setup_contact(acfactory) -> None: bob_contact_alice = bob.get_contact_by_addr(alice.get_config("addr")) bob_contact_alice_snapshot = bob_contact_alice.get_snapshot() assert bob_contact_alice_snapshot.is_verified - assert bob_contact_alice_snapshot.is_profile_verified def test_qr_securejoin(acfactory): @@ -51,7 +49,6 @@ def test_qr_securejoin(acfactory): alice_contact_bob = alice.get_contact_by_addr(bob.get_config("addr")) alice_contact_bob_snapshot = alice_contact_bob.get_snapshot() assert alice_contact_bob_snapshot.is_verified - assert alice_contact_bob_snapshot.is_profile_verified while True: event = bob.wait_for_event() @@ -62,7 +59,6 @@ def test_qr_securejoin(acfactory): bob_contact_alice = bob.get_contact_by_addr(alice.get_config("addr")) bob_contact_alice_snapshot = bob_contact_alice.get_snapshot() assert bob_contact_alice_snapshot.is_verified - assert bob_contact_alice_snapshot.is_profile_verified @pytest.mark.xfail() diff --git a/src/contact.rs b/src/contact.rs index 979acf677..21d16426d 100644 --- a/src/contact.rs +++ b/src/contact.rs @@ -1261,9 +1261,8 @@ impl Contact { /// in contact list items and /// in chat member list items. /// - /// Do not use this function when displaying the contact profile view. - /// Display green checkmark in the title of the contact profile - /// if [Self::is_profile_verified] returns true. + /// In contact profile view, us this function only if there is no chat with the contact, + /// otherwise use is_chat_protected(). /// Use [Self::get_verifier_id] to display the verifier contact /// in the info section of the contact profile. pub async fn is_verified(&self, context: &Context) -> Result { @@ -1322,6 +1321,11 @@ impl Contact { /// This generally should be consistent with the 1:1 chat with the contact /// so 1:1 chat with the contact and the contact profile /// either both display the green checkmark or both don't display a green checkmark. + /// + /// UI often knows beforehand if a chat exists and can also call + /// `chat.is_protected()` (if there is a chat) + /// or `contact.is_verified()` (if there is no chat) directly. + /// This is often easier and also skips some database calls. pub async fn is_profile_verified(&self, context: &Context) -> Result { let contact_id = self.id;