Skip to content

Commit

Permalink
fix(Contacts): Use contactRequestState enum for determinating correct…
Browse files Browse the repository at this point in the history
… contact state
  • Loading branch information
MishkaRogachev authored and jrainville committed May 2, 2023
1 parent 8ff42d0 commit 206800b
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 50 deletions.
1 change: 1 addition & 0 deletions src/app/modules/main/module.nim
Original file line number Diff line number Diff line change
Expand Up @@ -959,6 +959,7 @@ method getContactDetailsAsJson*[T](self: Module[T], publicKey: string, getVerifi
"removed": contact.removed,
"trustStatus": contact.trustStatus.int,
# TODO rename verificationStatus to outgoingVerificationStatus
"contactRequestState": contact.contactRequestState.int,
"verificationStatus": contact.verificationStatus.int,
"incomingVerificationStatus": requestStatus,
"hasAddedUs": contact.hasAddedUs,
Expand Down
2 changes: 1 addition & 1 deletion src/app/modules/main/profile_section/contacts/module.nim
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ proc addItemToAppropriateModel(self: Module, item: UserItem) =
self.view.blockedContactsModel().addItem(item)
return

case contact.requestState:
case contact.contactRequestState:
of ContactRequestState.Received:
self.view.receivedContactRequestsModel().addItem(item)
of ContactRequestState.Sent:
Expand Down
12 changes: 6 additions & 6 deletions src/app_service/service/contacts/dto/contacts.nim
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ type ContactsDto* = object
isSyncing*: bool
removed*: bool
trustStatus*: TrustStatus
requestState*: ContactRequestState
contactRequestState*: ContactRequestState
verificationStatus*: VerificationStatus

proc `$`(self: Images): string =
Expand Down Expand Up @@ -144,10 +144,10 @@ proc toContactsDto*(jsonObj: JsonNode): ContactsDto =
discard jsonObj.getProp("localNickname", result.localNickname)
discard jsonObj.getProp("bio", result.bio)

result.requestState = ContactRequestState.None
var requestState: int
discard jsonObj.getProp("contactRequestState", requestState)
result.requestState = requestState.toContactRequestState()
result.contactRequestState = ContactRequestState.None
var contactRequestState: int
discard jsonObj.getProp("contactRequestState", contactRequestState)
result.contactRequestState = contactRequestState.toContactRequestState()

result.trustStatus = TrustStatus.Unknown
var trustStatusInt: int
Expand Down Expand Up @@ -194,7 +194,7 @@ proc isContactRequestReceived*(self: ContactsDto): bool =
return self.hasAddedUs

proc isReceivedContactRequestRejected*(self: ContactsDto): bool =
return self.requestState == ContactRequestState.Dismissed
return self.contactRequestState == ContactRequestState.Dismissed

proc isContactRequestSent*(self: ContactsDto): bool =
return self.added
Expand Down
7 changes: 7 additions & 0 deletions src/app_service/service/contacts/service.nim
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,8 @@ QtObject:
contact.added = true
contact.blocked = false
contact.removed = false
contact.contactRequestState = ContactRequestState.Sent

self.saveContact(contact)
self.events.emit(SIGNAL_CONTACT_ADDED, ContactArgs(contactId: contact.id))
self.activityCenterService.parseActivityCenterResponse(response)
Expand All @@ -445,6 +447,8 @@ QtObject:
var contact = self.getContactById(publicKey)
contact.added = true
contact.removed = false
contact.contactRequestState = ContactRequestState.Mutual

self.saveContact(contact)
self.events.emit(SIGNAL_CONTACT_ADDED, ContactArgs(contactId: contact.id))
self.activityCenterService.parseActivityCenterResponse(response)
Expand All @@ -467,6 +471,8 @@ QtObject:
return
var contact = self.getContactById(publicKey)
contact.removed = true
contact.contactRequestState = ContactRequestState.Dismissed

self.saveContact(contact)
self.events.emit(SIGNAL_CONTACT_REMOVED, ContactArgs(contactId: contact.id))
self.activityCenterService.parseActivityCenterResponse(response)
Expand Down Expand Up @@ -523,6 +529,7 @@ QtObject:
contact.removed = true
contact.added = false
contact.hasAddedUs = false
contact.contactRequestState = ContactRequestState.None

self.saveContact(contact)
self.events.emit(SIGNAL_CONTACT_REMOVED, ContactArgs(contactId: contact.id))
Expand Down
6 changes: 6 additions & 0 deletions ui/app/mainui/activitycenter/stores/ActivityCenterStore.qml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,12 @@ QtObject {
Declined = 3
}

enum ActivityCenterContactRequestState {
Pending = 1,
Accepted = 2,
Dismissed = 3
}

readonly property var activityCenterModuleInst: activityCenterModule
readonly property var activityCenterNotifications: activityCenterModuleInst.activityNotificationsModel

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,14 @@ import utils 1.0

import "../panels"
import "../popups"
import "../stores"

ActivityNotificationMessage {
id: root

readonly property bool pending: notification && notification.message.contactRequestState === Constants.contactRequestStatePending
readonly property bool accepted: notification && notification.message.contactRequestState === Constants.contactRequestStateAccepted
readonly property bool dismissed: notification && notification.message.contactRequestState === Constants.contactRequestStateDismissed
readonly property bool pending: notification && notification.message.contactRequestState === ActivityCenterStore.ActivityCenterContactRequestState.Pending
readonly property bool accepted: notification && notification.message.contactRequestState === ActivityCenterStore.ActivityCenterContactRequestState.Accepted
readonly property bool dismissed: notification && notification.message.contactRequestState === ActivityCenterStore.ActivityCenterContactRequestState.Dismissed

readonly property string contactRequestId: notification && notification.message ? notification.message.id : ""

Expand Down
59 changes: 24 additions & 35 deletions ui/imports/shared/views/ProfileDialogView.qml
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,7 @@ Pane {
readonly property bool isContact: contactDetails.isContact
readonly property bool isBlocked: contactDetails.isBlocked

readonly property bool isContactRequestSent: contactDetails.isAdded
readonly property bool isContactRequestReceived: contactDetails.hasAddedUs
readonly property int contactRequestState: contactDetails.contactRequestState

readonly property int outgoingVerificationStatus: contactDetails.verificationStatus
readonly property int incomingVerificationStatus: contactDetails.incomingVerificationStatus
Expand Down Expand Up @@ -362,41 +361,31 @@ Pane {
if (d.isBlocked)
return btnUnblockUserComponent

// contact request, outgoing, rejected
if (!d.isContact && d.isContactRequestSent && d.outgoingVerificationStatus === Constants.verificationStatus.declined)
return txtRejectedContactRequestComponent
// block user
if (d.contactDetails.trustStatus === Constants.trustStatus.untrustworthy)
return btnBlockUserComponent

// contact request, outgoing, pending
if (!d.isContact && d.isContactRequestSent)
// depend on contactRequestState
switch (d.contactRequestState) {
case Constants.ContactRequestState.Sent:
return txtPendingContactRequestComponent

// contact request, incoming, pending
if (!d.isContact && d.isContactRequestReceived) {
case Constants.ContactRequestState.Received:
return btnAcceptContactRequestComponent
case Constants.ContactRequestState.Mutual: {
if (d.incomingVerificationStatus === Constants.verificationStatus.declined) {
return btnBlockUserComponent
} else if (!d.isTrusted && d.isVerificationRequestReceived) {
return btnRespondToIdRequestComponent
}
return btnSendMessageComponent
}

// contact request, incoming, rejected
if (d.isContactRequestSent && d.incomingVerificationStatus === Constants.verificationStatus.declined)
return btnBlockUserComponent

// verified contact request, incoming, pending
if (d.isContact && !d.isTrusted && d.isVerificationRequestReceived)
return btnRespondToIdRequestComponent

// block user
if (!d.isContact && !d.isBlocked &&
(d.contactDetails.trustStatus === Constants.trustStatus.untrustworthy || d.outgoingVerificationStatus === Constants.verificationStatus.declined))
return btnBlockUserComponent

// send contact request
if (!d.isContact && !d.isBlocked && !d.isContactRequestSent)
case Constants.ContactRequestState.None:
case Constants.ContactRequestState.Dismissed:
return btnSendContactRequestComponent

// send message
if (d.isContact && !d.isBlocked)
return btnSendMessageComponent

console.warn("!!! UNHANDLED CONTACT ACTION BUTTON; PUBKEY", root.publicKey)
default:
console.warn("!!! UNHANDLED CONTACT ACTION BUTTON; PUBKEY", root.publicKey)
return null
}
}
}

Expand All @@ -417,9 +406,9 @@ Pane {
StatusMenu {
id: moreMenu
width: 230

// FIXME: raly on contactRequestState !!!
SendContactRequestMenuItem {
enabled: !d.isContact && !d.isBlocked && !d.isContactRequestSent && !d.contactDetails.removed &&
enabled: !d.isContact && !d.isBlocked && !d.contactRequestState === Constants.ContactRequestState.Sent &&
d.contactDetails.trustStatus === Constants.trustStatus.untrustworthy // we have an action button otherwise
onTriggered: {
moreMenu.close()
Expand Down Expand Up @@ -513,7 +502,7 @@ Pane {
text: qsTr("Remove Contact")
icon.name: "remove-contact"
type: StatusAction.Type.Danger
enabled: d.isContact && !d.isBlocked
enabled: d.isContact && !d.isBlocked && d.contactRequestState !== Constants.ContactRequestState.Sent
onTriggered: {
moreMenu.close()
removeContactConfirmationDialog.open()
Expand Down
13 changes: 8 additions & 5 deletions ui/imports/utils/Constants.qml
Original file line number Diff line number Diff line change
Expand Up @@ -705,11 +705,6 @@ QtObject {
readonly property int communityChatInvitationOnlyAccess: 2
readonly property int communityChatOnRequestAccess: 3

readonly property int contactRequestStateNone: 0
readonly property int contactRequestStatePending: 1
readonly property int contactRequestStateAccepted: 2
readonly property int contactRequestStateDismissed: 3

readonly property int maxNbDaysToFetch: 30
readonly property int fetchRangeLast24Hours: 86400
readonly property int fetchRangeLast2Days: 172800
Expand Down Expand Up @@ -898,6 +893,14 @@ QtObject {
Deployed
}

enum ContactRequestState {
None = 0,
Mutual = 1,
Sent = 2,
Received = 3,
Dismissed = 4
}

readonly property QtObject walletSection: QtObject {
readonly property string cancelledMessage: "cancelled"
}
Expand Down

0 comments on commit 206800b

Please # to comment.