From 3cdc1358ba679c03be8a8bd953c61aa0bad0ee63 Mon Sep 17 00:00:00 2001 From: Sale Djenic Date: Fri, 8 Apr 2022 22:17:16 +0200 Subject: [PATCH] fix(@desktop/contacts): multiple contact related issues fixed Fixes #5354 #5225 #5198 --- .../main/profile_section/contacts/module.nim | 38 ++++--- .../main/profile_section/contacts/view.nim | 61 +++++----- .../service/contacts/dto/contacts.nim | 19 ++-- src/app_service/service/contacts/service.nim | 28 +++-- src/app_service/service/message/service.nim | 7 +- src/backend/contacts.nim | 2 +- .../Profile/stores/ContactsStore.qml | 6 +- .../AppLayouts/Profile/views/ContactsView.qml | 106 +++++++++--------- vendor/nim-status-go | 2 +- 9 files changed, 149 insertions(+), 120 deletions(-) diff --git a/src/app/modules/main/profile_section/contacts/module.nim b/src/app/modules/main/profile_section/contacts/module.nim index 99fe876baf..7453a187ab 100644 --- a/src/app/modules/main/profile_section/contacts/module.nim +++ b/src/app/modules/main/profile_section/contacts/module.nim @@ -64,8 +64,9 @@ method viewDidLoad*(self: Module) = self.buildModel(self.view.blockedContactsModel(), ContactsGroup.BlockedContacts) self.buildModel(self.view.receivedContactRequestsModel(), ContactsGroup.IncomingPendingContactRequests) self.buildModel(self.view.sentContactRequestsModel(), ContactsGroup.OutgoingPendingContactRequests) - self.buildModel(self.view.receivedButRejectedContactRequestsModel(), ContactsGroup.IncomingRejectedContactRequests) - self.buildModel(self.view.sentButRejectedContactRequestsModel(), ContactsGroup.IncomingRejectedContactRequests) + # Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. + # self.buildModel(self.view.receivedButRejectedContactRequestsModel(), ContactsGroup.IncomingRejectedContactRequests) + # self.buildModel(self.view.sentButRejectedContactRequestsModel(), ContactsGroup.IncomingRejectedContactRequests) self.moduleLoaded = true self.delegate.contactsModuleDidLoad() @@ -95,27 +96,33 @@ method removeContactRequestRejection*(self: Module, publicKey: string) = self.controller.removeContactRequestRejection(publicKey) proc addItemToAppropriateModel(self: Module, item: Item) = - if(item.isBlocked()): + if(singletonInstance.userProfile.getPubKey() == item.pubKey): + return + let contact = self.controller.getContact(item.pubKey()) + if(contact.isContactRemoved()): + return + elif(contact.isBlocked()): self.view.blockedContactsModel().addItem(item) - elif(item.isMutualContact()): + elif(contact.isMutualContact()): self.view.myMutualContactsModel().addItem(item) else: - let contact = self.controller.getContact(item.pubKey()) - if(contact.isContactRequestReceived() and not contact.isContactRequestSent() and not contact.isReceivedContactRequestRejected()): + if(contact.isContactRequestReceived() and not contact.isContactRequestSent()): self.view.receivedContactRequestsModel().addItem(item) - elif(contact.isContactRequestSent() and not contact.isContactRequestReceived() and not contact.isSentContactRequestRejected() and singletonInstance.userProfile.getPubKey() != item.pubKey): + elif(contact.isContactRequestSent() and not contact.isContactRequestReceived()): self.view.sentContactRequestsModel().addItem(item) - elif(contact.isContactRequestReceived() and contact.isReceivedContactRequestRejected()): - self.view.receivedButRejectedContactRequestsModel().addItem(item) - elif(contact.isContactRequestSent() and contact.isSentContactRequestRejected()): - self.view.sentButRejectedContactRequestsModel().addItem(item) + # Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. + # elif(contact.isContactRequestReceived() and contact.isReceivedContactRequestRejected()): + # self.view.receivedButRejectedContactRequestsModel().addItem(item) + # elif(contact.isContactRequestSent() and contact.isSentContactRequestRejected()): + # self.view.sentButRejectedContactRequestsModel().addItem(item) proc removeItemWithPubKeyFromAllModels(self: Module, publicKey: string) = self.view.myMutualContactsModel().removeItemWithPubKey(publicKey) self.view.receivedContactRequestsModel().removeItemWithPubKey(publicKey) self.view.sentContactRequestsModel().removeItemWithPubKey(publicKey) - self.view.receivedButRejectedContactRequestsModel().removeItemWithPubKey(publicKey) - self.view.sentButRejectedContactRequestsModel().removeItemWithPubKey(publicKey) + # Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. + # self.view.receivedButRejectedContactRequestsModel().removeItemWithPubKey(publicKey) + # self.view.sentButRejectedContactRequestsModel().removeItemWithPubKey(publicKey) self.view.blockedContactsModel().removeItemWithPubKey(publicKey) method removeIfExistsAndAddToAppropriateModel*(self: Module, publicKey: string) = @@ -146,6 +153,7 @@ method contactNicknameChanged*(self: Module, publicKey: string) = self.view.myMutualContactsModel().updateName(publicKey, name) self.view.receivedContactRequestsModel().updateName(publicKey, name) self.view.sentContactRequestsModel().updateName(publicKey, name) - self.view.receivedButRejectedContactRequestsModel().updateName(publicKey, name) - self.view.sentButRejectedContactRequestsModel().updateName(publicKey, name) + # Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. + # self.view.receivedButRejectedContactRequestsModel().updateName(publicKey, name) + # self.view.sentButRejectedContactRequestsModel().updateName(publicKey, name) self.view.blockedContactsModel().updateName(publicKey, name) diff --git a/src/app/modules/main/profile_section/contacts/view.nim b/src/app/modules/main/profile_section/contacts/view.nim index 7073b24847..32d008555a 100644 --- a/src/app/modules/main/profile_section/contacts/view.nim +++ b/src/app/modules/main/profile_section/contacts/view.nim @@ -15,10 +15,11 @@ QtObject: receivedContactRequestsModelVariant: QVariant sentContactRequestsModel: Model sentContactRequestsModelVariant: QVariant - receivedButRejectedContactRequestsModel: Model - receivedButRejectedContactRequestsModelVariant: QVariant - sentButRejectedContactRequestsModel: Model - sentButRejectedContactRequestsModelVariant: QVariant + # Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. + # receivedButRejectedContactRequestsModel: Model + # receivedButRejectedContactRequestsModelVariant: QVariant + # sentButRejectedContactRequestsModel: Model + # sentButRejectedContactRequestsModelVariant: QVariant proc delete*(self: View) = self.myMutualContactsModel.delete @@ -29,10 +30,11 @@ QtObject: self.receivedContactRequestsModelVariant.delete self.sentContactRequestsModel.delete self.sentContactRequestsModelVariant.delete - self.receivedButRejectedContactRequestsModel.delete - self.receivedButRejectedContactRequestsModelVariant.delete - self.sentButRejectedContactRequestsModel.delete - self.sentButRejectedContactRequestsModelVariant.delete + # Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. + # self.receivedButRejectedContactRequestsModel.delete + # self.receivedButRejectedContactRequestsModelVariant.delete + # self.sentButRejectedContactRequestsModel.delete + # self.sentButRejectedContactRequestsModelVariant.delete self.QObject.delete proc newView*(delegate: io_interface.AccessInterface): View = @@ -47,10 +49,11 @@ QtObject: result.receivedContactRequestsModelVariant = newQVariant(result.receivedContactRequestsModel) result.sentContactRequestsModel = newModel() result.sentContactRequestsModelVariant = newQVariant(result.sentContactRequestsModel) - result.receivedButRejectedContactRequestsModel = newModel() - result.receivedButRejectedContactRequestsModelVariant = newQVariant(result.receivedButRejectedContactRequestsModel) - result.sentButRejectedContactRequestsModel = newModel() - result.sentButRejectedContactRequestsModelVariant = newQVariant(result.sentButRejectedContactRequestsModel) + # Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. + # result.receivedButRejectedContactRequestsModel = newModel() + # result.receivedButRejectedContactRequestsModelVariant = newQVariant(result.receivedButRejectedContactRequestsModel) + # result.sentButRejectedContactRequestsModel = newModel() + # result.sentButRejectedContactRequestsModelVariant = newQVariant(result.sentButRejectedContactRequestsModel) proc load*(self: View) = self.delegate.viewDidLoad() @@ -67,11 +70,12 @@ QtObject: proc sentContactRequestsModel*(self: View): Model = return self.sentContactRequestsModel - proc receivedButRejectedContactRequestsModel*(self: View): Model = - return self.receivedButRejectedContactRequestsModel + # Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. + # proc receivedButRejectedContactRequestsModel*(self: View): Model = + # return self.receivedButRejectedContactRequestsModel - proc sentButRejectedContactRequestsModel*(self: View): Model = - return self.sentButRejectedContactRequestsModel + # proc sentButRejectedContactRequestsModel*(self: View): Model = + # return self.sentButRejectedContactRequestsModel proc myMutualContactsModelChanged(self: View) {.signal.} proc getMyMutualContactsModel(self: View): QVariant {.slot.} = @@ -101,19 +105,20 @@ QtObject: read = getSentContactRequestsModel notify = sentContactRequestsModelChanged - proc receivedButRejectedContactRequestsModelChanged(self: View) {.signal.} - proc getReceivedButRejectedContactRequestsModel(self: View): QVariant {.slot.} = - return self.receivedButRejectedContactRequestsModelVariant - QtProperty[QVariant] receivedButRejectedContactRequestsModel: - read = getReceivedButRejectedContactRequestsModel - notify = receivedButRejectedContactRequestsModelChanged + # Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. + # proc receivedButRejectedContactRequestsModelChanged(self: View) {.signal.} + # proc getReceivedButRejectedContactRequestsModel(self: View): QVariant {.slot.} = + # return self.receivedButRejectedContactRequestsModelVariant + # QtProperty[QVariant] receivedButRejectedContactRequestsModel: + # read = getReceivedButRejectedContactRequestsModel + # notify = receivedButRejectedContactRequestsModelChanged - proc sentButRejectedContactRequestsModelChanged(self: View) {.signal.} - proc getSentButRejectedContactRequestsModel(self: View): QVariant {.slot.} = - return self.sentButRejectedContactRequestsModelVariant - QtProperty[QVariant] sentButRejectedContactRequestsModel: - read = getSentButRejectedContactRequestsModel - notify = sentButRejectedContactRequestsModelChanged + # proc sentButRejectedContactRequestsModelChanged(self: View) {.signal.} + # proc getSentButRejectedContactRequestsModel(self: View): QVariant {.slot.} = + # return self.sentButRejectedContactRequestsModelVariant + # QtProperty[QVariant] sentButRejectedContactRequestsModel: + # read = getSentButRejectedContactRequestsModel + # notify = sentButRejectedContactRequestsModelChanged proc isMyMutualContact*(self: View, publicKey: string): bool {.slot.} = return self.myMutualContactsModel.containsItemWithPubKey(publicKey) diff --git a/src/app_service/service/contacts/dto/contacts.nim b/src/app_service/service/contacts/dto/contacts.nim index e649861ab0..e6423a7084 100644 --- a/src/app_service/service/contacts/dto/contacts.nim +++ b/src/app_service/service/contacts/dto/contacts.nim @@ -100,15 +100,20 @@ proc isContactRequestReceived*(self: ContactsDto): bool = proc isContactRequestSent*(self: ContactsDto): bool = return self.added -proc isSentContactRequestRejected*(self: ContactsDto): bool = - # TODO not implemented in `status-go` yet - # We don't have this prop for now. - return false - -proc isReceivedContactRequestRejected*(self: ContactsDto): bool = - # We need to check this. +proc isContactRemoved*(self: ContactsDto): bool = return self.removed +# Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. +# proc isSentContactRequestRejected*(self: ContactsDto): bool = +# # TODO not implemented in `status-go` yet +# # We don't have this prop for now. +# return false + +# Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. +# proc isReceivedContactRequestRejected*(self: ContactsDto): bool = +# # We need to check this. +# return self.removed + proc isBlocked*(self: ContactsDto): bool = return self.blocked diff --git a/src/app_service/service/contacts/service.nim b/src/app_service/service/contacts/service.nim index 3c07ea0878..6cf5c4892e 100644 --- a/src/app_service/service/contacts/service.nim +++ b/src/app_service/service/contacts/service.nim @@ -170,24 +170,27 @@ QtObject: return contacts.filter(x => x.id != myPubKey and x.isContactRequestReceived() and not x.isContactRequestSent() and - not x.isReceivedContactRequestRejected() and + not x.isContactRemoved() and + # not x.isReceivedContactRequestRejected() and not x.isBlocked()) elif (group == ContactsGroup.OutgoingPendingContactRequests): return contacts.filter(x => x.id != myPubKey and x.isContactRequestSent() and not x.isContactRequestReceived() and - not x.isSentContactRequestRejected() and - not x.isBlocked()) - elif (group == ContactsGroup.IncomingRejectedContactRequests): - return contacts.filter(x => x.id != myPubKey and - x.isContactRequestReceived() and - x.isReceivedContactRequestRejected() and - not x.isBlocked()) - elif (group == ContactsGroup.OutgoingRejectedContactRequests): - return contacts.filter(x => x.id != myPubKey and - x.isContactRequestSent() and - x.isSentContactRequestRejected() and + # not x.isSentContactRequestRejected() and + not x.isContactRemoved() and not x.isBlocked()) + # Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. + # elif (group == ContactsGroup.IncomingRejectedContactRequests): + # return contacts.filter(x => x.id != myPubKey and + # x.isContactRequestReceived() and + # x.isReceivedContactRequestRejected() and + # not x.isBlocked()) + # elif (group == ContactsGroup.OutgoingRejectedContactRequests): + # return contacts.filter(x => x.id != myPubKey and + # x.isContactRequestSent() and + # x.isSentContactRequestRejected() and + # not x.isBlocked()) elif (group == ContactsGroup.BlockedContacts): return contacts.filter(x => x.id != myPubKey and x.isBlocked()) @@ -195,6 +198,7 @@ QtObject: # we need to revise this when we introduce "identity verification" feature return contacts.filter(x => x.id != myPubKey and x.isMutualContact() and + not x.isContactRemoved() and not x.isBlocked()) elif (group == ContactsGroup.AllKnownContacts): return contacts diff --git a/src/app_service/service/message/service.nim b/src/app_service/service/message/service.nim index 7af3e72737..42cc360339 100644 --- a/src/app_service/service/message/service.nim +++ b/src/app_service/service/message/service.nim @@ -151,8 +151,11 @@ QtObject: error "error: received `chats` array for handling messages update is empty" return - if (not chats[0].active): - return + # Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. + # blocking contact deletes the chat on the `status-go` side, after unblocking it, `active` prop is still false + # that's the reason why the following check is commented out here. + # if (not chats[0].active): + # return let chatId = chats[0].id let chatType = chats[0].chatType diff --git a/src/backend/contacts.nim b/src/backend/contacts.nim index 7b888989a2..7d9ad40f63 100644 --- a/src/backend/contacts.nim +++ b/src/backend/contacts.nim @@ -13,7 +13,7 @@ proc getContactById*(id: string): RpcResponse[JsonNode] {.raises: [Exception].} result = callPrivateRPC("getContactByID".prefix, payload) proc blockContact*(id: string): RpcResponse[JsonNode] {.raises: [Exception].} = - result = callPrivateRPC("blockContact".prefix, %* [id]) + result = callPrivateRPC("blockContactDesktop".prefix, %* [id]) proc unblockContact*(id: string): RpcResponse[JsonNode] {.raises: [Exception].} = result = callPrivateRPC("unblockContact".prefix, %* [id]) diff --git a/ui/app/AppLayouts/Profile/stores/ContactsStore.qml b/ui/app/AppLayouts/Profile/stores/ContactsStore.qml index 80c174d6a8..f49fee361f 100644 --- a/ui/app/AppLayouts/Profile/stores/ContactsStore.qml +++ b/ui/app/AppLayouts/Profile/stores/ContactsStore.qml @@ -15,8 +15,10 @@ QtObject { property var blockedContactsModel: contactsModule.blockedContactsModel property var receivedContactRequestsModel: contactsModule.receivedContactRequestsModel property var sentContactRequestsModel: contactsModule.sentContactRequestsModel - property var receivedButRejectedContactRequestsModel: contactsModule.receivedButRejectedContactRequestsModel - property var sentButRejectedContactRequestsModel: contactsModule.sentButRejectedContactRequestsModel + + // Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. +// property var receivedButRejectedContactRequestsModel: contactsModule.receivedButRejectedContactRequestsModel +// property var sentButRejectedContactRequestsModel: contactsModule.sentButRejectedContactRequestsModel function resolveENS(value) { root.mainModuleInst.resolveENS(value, "") diff --git a/ui/app/AppLayouts/Profile/views/ContactsView.qml b/ui/app/AppLayouts/Profile/views/ContactsView.qml index 93b0ab72ca..287e363bd2 100644 --- a/ui/app/AppLayouts/Profile/views/ContactsView.qml +++ b/ui/app/AppLayouts/Profile/views/ContactsView.qml @@ -106,13 +106,14 @@ Item { btnText: qsTr("Pending Requests") badge.value: contactList.count } - StatusTabButton { - id: rejectedRequestsBtn - addToWidth: Style.current.bigPadding - enabled: root.contactsStore.receivedButRejectedContactRequestsModel.count > 0 || - root.contactsStore.sentButRejectedContactRequestsModel.count > 0 - btnText: qsTr("Rejected Requests") - } + // Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. +// StatusTabButton { +// id: rejectedRequestsBtn +// addToWidth: Style.current.bigPadding +// enabled: root.contactsStore.receivedButRejectedContactRequestsModel.count > 0 || +// root.contactsStore.sentButRejectedContactRequestsModel.count > 0 +// btnText: qsTr("Rejected Requests") +// } StatusTabButton { id: blockedBtn addToWidth: Style.current.bigPadding @@ -255,60 +256,61 @@ Item { } } - // REJECTED REQUESTS - Item { - Layout.fillWidth: true - Layout.fillHeight: true + // Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections. +// // REJECTED REQUESTS +// Item { +// Layout.fillWidth: true +// Layout.fillHeight: true - ColumnLayout { - anchors.fill: parent +// ColumnLayout { +// anchors.fill: parent - ContactsListPanel { - Layout.fillWidth: true - Layout.preferredHeight: parent.height * 0.5 - clip: true - title: qsTr("Received") - searchString: searchBox.text - contactsModel: root.contactsStore.receivedButRejectedContactRequestsModel - panelUsage: Constants.contactsPanelUsage.rejectedReceivedContactRequest +// ContactsListPanel { +// Layout.fillWidth: true +// Layout.preferredHeight: parent.height * 0.5 +// clip: true +// title: qsTr("Received") +// searchString: searchBox.text +// contactsModel: root.contactsStore.receivedButRejectedContactRequestsModel +// panelUsage: Constants.contactsPanelUsage.rejectedReceivedContactRequest - onOpenProfilePopup: { - Global.openProfilePopup(publicKey) - } +// onOpenProfilePopup: { +// Global.openProfilePopup(publicKey) +// } - onOpenChangeNicknamePopup: { - Global.openProfilePopup(publicKey, null, true) - } +// onOpenChangeNicknamePopup: { +// Global.openProfilePopup(publicKey, null, true) +// } - onRejectionRemoved: { - root.contactsStore.removeContactRequestRejection(publicKey) - } - } +// onRejectionRemoved: { +// root.contactsStore.removeContactRequestRejection(publicKey) +// } +// } - ContactsListPanel { - Layout.fillWidth: true - Layout.preferredHeight: parent.height * 0.5 - clip: true - title: qsTr("Sent") - searchString: searchBox.text - contactsModel: root.contactsStore.sentButRejectedContactRequestsModel - panelUsage: Constants.contactsPanelUsage.rejectedSentContactRequest +// ContactsListPanel { +// Layout.fillWidth: true +// Layout.preferredHeight: parent.height * 0.5 +// clip: true +// title: qsTr("Sent") +// searchString: searchBox.text +// contactsModel: root.contactsStore.sentButRejectedContactRequestsModel +// panelUsage: Constants.contactsPanelUsage.rejectedSentContactRequest - onOpenProfilePopup: { - Global.openProfilePopup(publicKey) - } +// onOpenProfilePopup: { +// Global.openProfilePopup(publicKey) +// } - onOpenChangeNicknamePopup: { - Global.openProfilePopup(publicKey, null, true) - } - } +// onOpenChangeNicknamePopup: { +// Global.openProfilePopup(publicKey, null, true) +// } +// } - Item { - Layout.fillWidth: true - Layout.fillHeight: true - } - } - } +// Item { +// Layout.fillWidth: true +// Layout.fillHeight: true +// } +// } +// } // BLOCKED ContactsListPanel { diff --git a/vendor/nim-status-go b/vendor/nim-status-go index 34acdba156..06d52222ad 160000 --- a/vendor/nim-status-go +++ b/vendor/nim-status-go @@ -1 +1 @@ -Subproject commit 34acdba156be8faf7ea9bacaa86eed41863fe88c +Subproject commit 06d52222add28c4d65e3a8816881f1c843cd0787