diff --git a/deltachat-jsonrpc/src/api/types/chat_list.rs b/deltachat-jsonrpc/src/api/types/chat_list.rs index d53cea390..39c7ea629 100644 --- a/deltachat-jsonrpc/src/api/types/chat_list.rs +++ b/deltachat-jsonrpc/src/api/types/chat_list.rs @@ -42,6 +42,8 @@ pub enum ChatListItemFetchResult { is_pinned: bool, is_muted: bool, is_contact_request: bool, + /// contact id if this is a dm chat (for view profile entry in context menu) + dm_chat_contact: Option, }, ArchiveLink, #[serde(rename_all = "camelCase")] @@ -86,9 +88,15 @@ pub(crate) async fn get_chat_list_item_by_id( None => None, }; - let self_in_group = get_chat_contacts(ctx, chat_id) - .await? - .contains(&ContactId::SELF); + let chat_contacts = get_chat_contacts(ctx, chat_id).await?; + + let self_in_group = chat_contacts.contains(&ContactId::SELF); + + let dm_chat_contact = if chat.get_type() == Chattype::Single { + chat_contacts.get(0).map(|contact_id| contact_id.to_u32()) + } else { + None + }; let fresh_message_counter = chat_id.get_fresh_msg_cnt(ctx).await?; let color = color_int_to_hex_string(chat.get_color(ctx).await?); @@ -113,5 +121,6 @@ pub(crate) async fn get_chat_list_item_by_id( is_pinned: visibility == ChatVisibility::Pinned, is_muted: chat.is_muted(), is_contact_request: chat.is_contact_request(), + dm_chat_contact, }) } diff --git a/deltachat-jsonrpc/typescript/generated/types.ts b/deltachat-jsonrpc/typescript/generated/types.ts index f5722e47e..f4a4f9287 100644 --- a/deltachat-jsonrpc/typescript/generated/types.ts +++ b/deltachat-jsonrpc/typescript/generated/types.ts @@ -6,7 +6,11 @@ export type ProviderInfo={"before_login_hint":string;"overview_page":string;"sta export type Usize=number; export type ChatListEntry=[U32,U32]; export type I64=number; -export type ChatListItemFetchResult=(({"type":"ChatListItem";}&{"id":U32;"name":string;"avatarPath":(string|null);"color":string;"lastUpdated":(I64|null);"summaryText1":string;"summaryText2":string;"summaryStatus":U32;"isProtected":boolean;"isGroup":boolean;"freshMessageCounter":Usize;"isSelfTalk":boolean;"isDeviceTalk":boolean;"isSendingLocation":boolean;"isSelfInGroup":boolean;"isArchived":boolean;"isPinned":boolean;"isMuted":boolean;"isContactRequest":boolean;})|{"type":"ArchiveLink";}|({"type":"Error";}&{"id":U32;"error":string;})); +export type ChatListItemFetchResult=(({"type":"ChatListItem";}&{"id":U32;"name":string;"avatarPath":(string|null);"color":string;"lastUpdated":(I64|null);"summaryText1":string;"summaryText2":string;"summaryStatus":U32;"isProtected":boolean;"isGroup":boolean;"freshMessageCounter":Usize;"isSelfTalk":boolean;"isDeviceTalk":boolean;"isSendingLocation":boolean;"isSelfInGroup":boolean;"isArchived":boolean;"isPinned":boolean;"isMuted":boolean;"isContactRequest":boolean; +/** + * contact id if this is a dm chat (for view profile entry in context menu) + */ +"dmChatContact":(U32|null);})|{"type":"ArchiveLink";}|({"type":"Error";}&{"id":U32;"error":string;})); export type Contact={"address":string;"color":string;"auth_name":string;"status":string;"display_name":string;"id":U32;"name":string;"profile_image":(string|null);"name_and_addr":string;"is_blocked":boolean;"is_verified":boolean;}; export type FullChat={"id":U32;"name":string;"is_protected":boolean;"profile_image":(string|null);"archived":boolean;"chat_type":U32;"is_unpromoted":boolean;"is_self_talk":boolean;"contacts":(Contact)[];"contact_ids":(U32)[];"color":string;"fresh_message_counter":Usize;"is_contact_request":boolean;"is_device_chat":boolean;"self_in_group":boolean;"is_muted":boolean;"ephemeral_timer":U32;"can_send":boolean;}; export type I32=number;