From f93461575287414a0ae7b31d36e037bf908882e4 Mon Sep 17 00:00:00 2001 From: Mikhail Rogachev Date: Thu, 29 Feb 2024 12:49:37 +0300 Subject: [PATCH] feat: Add api for getting full pending CR object (#13749) --- .../profile_section/contacts/controller.nim | 4 +++ .../profile_section/contacts/io_interface.nim | 3 +++ .../main/profile_section/contacts/module.nim | 11 ++++++++ .../main/profile_section/contacts/view.nim | 3 +++ src/app_service/service/contacts/service.nim | 25 ++++++++++++++++--- src/backend/contacts.nim | 4 +++ .../Profile/stores/ContactsStore.qml | 5 ++++ vendor/status-go | 2 +- 8 files changed, 53 insertions(+), 4 deletions(-) diff --git a/src/app/modules/main/profile_section/contacts/controller.nim b/src/app/modules/main/profile_section/contacts/controller.nim index 5a8f9032d9..25eeab7cd7 100644 --- a/src/app/modules/main/profile_section/contacts/controller.nim +++ b/src/app/modules/main/profile_section/contacts/controller.nim @@ -3,6 +3,7 @@ import io_interface import ../../../../core/eventemitter import ../../../../../app_service/service/contacts/service as contacts_service import ../../../../../app_service/service/chat/service as chat_service +import ../../../../../app_service/service/message/dto/message as message_dto type Controller* = ref object of RootObj @@ -123,6 +124,9 @@ proc acceptContactRequest*(self: Controller, publicKey: string, contactRequestId proc dismissContactRequest*(self: Controller, publicKey: string, contactRequestId: string) = self.contactsService.dismissContactRequest(publicKey, contactRequestId) +proc getLatestContactRequestForContact*(self: Controller, publicKey: string): message_dto.MessageDto = + self.contactsService.getLatestContactRequestForContact(publicKey) + proc switchToOrCreateOneToOneChat*(self: Controller, chatId: string) = self.chatService.switchToOrCreateOneToOneChat(chatId, "") diff --git a/src/app/modules/main/profile_section/contacts/io_interface.nim b/src/app/modules/main/profile_section/contacts/io_interface.nim index f08f047bb8..e96d1a42f3 100644 --- a/src/app/modules/main/profile_section/contacts/io_interface.nim +++ b/src/app/modules/main/profile_section/contacts/io_interface.nim @@ -39,6 +39,9 @@ method dismissContactRequest*(self: AccessInterface, publicKey: string, contactR method dismissContactRequests*(self: AccessInterface, publicKeysJSON: string) {.base.} = raise newException(ValueError, "No implementation available") +method getLatestContactRequestForContactAsJson*(self: AccessInterface, publicKey: string): string {.base.} = + raise newException(ValueError, "No implementation available") + method changeContactNickname*(self: AccessInterface, publicKey: string, nickname: string) {.base.} = raise newException(ValueError, "No implementation available") diff --git a/src/app/modules/main/profile_section/contacts/module.nim b/src/app/modules/main/profile_section/contacts/module.nim index 93798ce6bf..69261ea87d 100644 --- a/src/app/modules/main/profile_section/contacts/module.nim +++ b/src/app/modules/main/profile_section/contacts/module.nim @@ -110,6 +110,17 @@ method acceptContactRequest*(self: Module, publicKey: string, contactRequestId: method dismissContactRequest*(self: Module, publicKey: string, contactRequestId: string) = self.controller.dismissContactRequest(publicKey, contactRequestId) +method getLatestContactRequestForContactAsJson*(self: Module, publicKey: string): string = + let contactRequest = self.controller.getLatestContactRequestForContact(publicKey) + let jsonObj = %* { + "id": contactRequest.id, + "from": contactRequest.from, + "clock": contactRequest.clock, + "text": contactRequest.text, + "contactRequestState": contactRequest.contactRequestState.int, + } + return $jsonObj + method switchToOrCreateOneToOneChat*(self: Module, publicKey: string) = self.controller.switchToOrCreateOneToOneChat(publicKey) diff --git a/src/app/modules/main/profile_section/contacts/view.nim b/src/app/modules/main/profile_section/contacts/view.nim index 4f7a20bfb2..afe02eb5ed 100644 --- a/src/app/modules/main/profile_section/contacts/view.nim +++ b/src/app/modules/main/profile_section/contacts/view.nim @@ -143,6 +143,9 @@ QtObject: proc dismissContactRequest*(self: View, publicKey: string, contactRequestId: string) {.slot.} = self.delegate.dismissContactRequest(publicKey, contactRequestId) + proc getLatestContactRequestForContactAsJson*(self: View, publicKey: string): string {.slot.} = + self.delegate.getLatestContactRequestForContactAsJson(publicKey) + proc changeContactNickname*(self: View, publicKey: string, nickname: string) {.slot.} = self.delegate.changeContactNickname(publicKey, nickname) diff --git a/src/app_service/service/contacts/service.nim b/src/app_service/service/contacts/service.nim index ae8de253ed..63651df08d 100644 --- a/src/app_service/service/contacts/service.nim +++ b/src/app_service/service/contacts/service.nim @@ -11,6 +11,7 @@ import ../../common/activity_center import ../settings/service as settings_service import ../network/service as network_service +import ../message/dto/message as message_dto import ../visual_identity/service as procs_from_visual_identity_service import ./dto/contacts as contacts_dto @@ -478,7 +479,7 @@ QtObject: checkAndEmitACNotificationsFromResponse(self.events, response.result{"activityCenterNotifications"}) except Exception as e: - error "an error occurred while sending contact request", msg = e.msg + error "an error occurred while sending the contact request", msg = e.msg proc acceptContactRequest*(self: Service, publicKey: string, contactRequestId: string) = try: @@ -501,7 +502,7 @@ QtObject: checkAndEmitACNotificationsFromResponse(self.events, response.result{"activityCenterNotifications"}) except Exception as e: - error "an error occurred while accepting contact request", msg=e.msg + error "an error occurred while accepting the contact request", msg=e.msg proc dismissContactRequest*(self: Service, publicKey: string, contactRequestId: string) = try: @@ -520,7 +521,25 @@ QtObject: checkAndEmitACNotificationsFromResponse(self.events, response.result{"activityCenterNotifications"}) except Exception as e: - error "an error occurred while dismissing contact request", msg=e.msg + error "an error occurred while dismissing the contact request", msg=e.msg + + proc getLatestContactRequestForContact*(self: Service, publicKey: string): message_dto.MessageDto = + try: + let response = status_contacts.getLatestContactRequestForContact(publicKey) + + if not response.error.isNil: + error "error getting incoming contact request ", msg = response.error.message + return + + let messages = response.result{"messages"} + if messages == nil or len(messages) < 1: + error "can't find incoming contact request for", publicKey + return + + return messages[0].toMessageDto() + + except Exception as e: + error "an error occurred while getting incoming contact request", msg=e.msg proc changeContactNickname*(self: Service, publicKey: string, nickname: string) = var contact = self.getContactById(publicKey) diff --git a/src/backend/contacts.nim b/src/backend/contacts.nim index 8709704154..f5e020bde9 100644 --- a/src/backend/contacts.nim +++ b/src/backend/contacts.nim @@ -59,6 +59,10 @@ proc declineContactRequest*(id: string): RpcResponse[JsonNode] {.raises: [Except }] result = callPrivateRPC("declineContactRequest".prefix, payload) +proc getLatestContactRequestForContact*(id: string): RpcResponse[JsonNode] {.raises: [Exception].} = + let payload = %* [id] + result = callPrivateRPC("getLatestContactRequestForContact".prefix, payload) + proc sendContactUpdate*(publicKey, ensName, thumbnail: string): RpcResponse[JsonNode] {.raises: [Exception].} = let payload = %* [publicKey, ensName, thumbnail] result = callPrivateRPC("sendContactUpdate".prefix, payload) diff --git a/ui/app/AppLayouts/Profile/stores/ContactsStore.qml b/ui/app/AppLayouts/Profile/stores/ContactsStore.qml index 8ef0de1c9b..e73e441dcd 100644 --- a/ui/app/AppLayouts/Profile/stores/ContactsStore.qml +++ b/ui/app/AppLayouts/Profile/stores/ContactsStore.qml @@ -91,6 +91,11 @@ QtObject { root.contactsModule.dismissContactRequest(pubKey, contactRequestId) } + function getLatestContactRequestForContactAsJson(pubKey) { + let resp = root.contactsModule.getLatestContactRequestForContactAsJson(pubKey) + return JSON.parse(resp) + } + function markAsTrusted(pubKey) { root.contactsModule.markAsTrusted(pubKey) } diff --git a/vendor/status-go b/vendor/status-go index 3f98a34eae..577db512c6 160000 --- a/vendor/status-go +++ b/vendor/status-go @@ -1 +1 @@ -Subproject commit 3f98a34eae7275bd5ee055de8e4f32213370cdaa +Subproject commit 577db512c6953bec5a82b961cd901c58851362dd