fix(Contacts): use `ContactRequestState` to filter out rejected requests
There's a bug in determining pending incoming contact requests where we don't honor already rejected ones. Simply checking if a contact in question `hasAddedUs` isn't enough because that only tells us if the contact has sent us a request in the past. It doesn't tell is whether the request was rejected already. As a result, rejected contact requests keep popping up in the UI after restarting the app. See #8156 for more information. This commit introduces a `ContactRequestState` enum in Status Desktop, similar to how it exists in status-go. Using this as `requestState` on `ContactDto`, we can easily figure out what's the request state for any given contact. Notices that this only makes use of `ContactRequestState` to check for whether a request was rejected. We probably want to consider using this for all other states as well (instead of relying on system tags). Closes #8156
This commit is contained in:
parent
42234c7d49
commit
88670ec5d0
|
@ -16,6 +16,14 @@ type TrustStatus* {.pure.}= enum
|
||||||
Trusted = 1,
|
Trusted = 1,
|
||||||
Untrustworthy = 2
|
Untrustworthy = 2
|
||||||
|
|
||||||
|
|
||||||
|
type ContactRequestState* {.pure.} = enum
|
||||||
|
None = 0
|
||||||
|
Mutual = 1
|
||||||
|
Sent = 2
|
||||||
|
Received = 3
|
||||||
|
Dismissed = 4
|
||||||
|
|
||||||
type VerificationStatus* {.pure.}= enum
|
type VerificationStatus* {.pure.}= enum
|
||||||
Unverified = 0
|
Unverified = 0
|
||||||
Verifying = 1
|
Verifying = 1
|
||||||
|
@ -51,6 +59,7 @@ type ContactsDto* = object
|
||||||
isSyncing*: bool
|
isSyncing*: bool
|
||||||
removed*: bool
|
removed*: bool
|
||||||
trustStatus*: TrustStatus
|
trustStatus*: TrustStatus
|
||||||
|
requestState*: ContactRequestState
|
||||||
verificationStatus*: VerificationStatus
|
verificationStatus*: VerificationStatus
|
||||||
|
|
||||||
proc `$`(self: Images): string =
|
proc `$`(self: Images): string =
|
||||||
|
@ -92,6 +101,11 @@ proc toImages(jsonObj: JsonNode): Images =
|
||||||
if(jsonObj.getProp("thumbnail", thumbnailObj)):
|
if(jsonObj.getProp("thumbnail", thumbnailObj)):
|
||||||
discard thumbnailObj.getProp("uri", result.thumbnail)
|
discard thumbnailObj.getProp("uri", result.thumbnail)
|
||||||
|
|
||||||
|
proc toContactRequestState*(value: int): ContactRequestState =
|
||||||
|
result = ContactRequestState.None
|
||||||
|
if value >= ord(low(ContactRequestState)) or value <= ord(high(ContactRequestState)):
|
||||||
|
result = ContactRequestState(value)
|
||||||
|
|
||||||
proc toTrustStatus*(value: int): TrustStatus =
|
proc toTrustStatus*(value: int): TrustStatus =
|
||||||
result = TrustStatus.Unknown
|
result = TrustStatus.Unknown
|
||||||
if value >= ord(low(TrustStatus)) or value <= ord(high(TrustStatus)):
|
if value >= ord(low(TrustStatus)) or value <= ord(high(TrustStatus)):
|
||||||
|
@ -126,6 +140,12 @@ proc toContactsDto*(jsonObj: JsonNode): ContactsDto =
|
||||||
discard jsonObj.getProp("localNickname", result.localNickname)
|
discard jsonObj.getProp("localNickname", result.localNickname)
|
||||||
discard jsonObj.getProp("bio", result.bio)
|
discard jsonObj.getProp("bio", result.bio)
|
||||||
|
|
||||||
|
|
||||||
|
result.requestState = ContactRequestState.None
|
||||||
|
var requestState: int
|
||||||
|
discard jsonObj.getProp("contactRequestState", requestState)
|
||||||
|
result.requestState = requestState.toContactRequestState()
|
||||||
|
|
||||||
result.trustStatus = TrustStatus.Unknown
|
result.trustStatus = TrustStatus.Unknown
|
||||||
var trustStatusInt: int
|
var trustStatusInt: int
|
||||||
discard jsonObj.getProp("trustStatus", trustStatusInt)
|
discard jsonObj.getProp("trustStatus", trustStatusInt)
|
||||||
|
@ -170,6 +190,9 @@ proc userOptionalName*(contact: ContactsDto): string =
|
||||||
proc isContactRequestReceived*(self: ContactsDto): bool =
|
proc isContactRequestReceived*(self: ContactsDto): bool =
|
||||||
return self.hasAddedUs
|
return self.hasAddedUs
|
||||||
|
|
||||||
|
proc isReceivedContactRequestRejected*(self: ContactsDto): bool =
|
||||||
|
return self.requestState == ContactRequestState.Dismissed
|
||||||
|
|
||||||
proc isContactRequestSent*(self: ContactsDto): bool =
|
proc isContactRequestSent*(self: ContactsDto): bool =
|
||||||
return self.added
|
return self.added
|
||||||
|
|
||||||
|
@ -182,11 +205,6 @@ proc isContactRemoved*(self: ContactsDto): bool =
|
||||||
# # We don't have this prop for now.
|
# # We don't have this prop for now.
|
||||||
# return false
|
# 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 =
|
proc isBlocked*(self: ContactsDto): bool =
|
||||||
return self.blocked
|
return self.blocked
|
||||||
|
|
||||||
|
|
|
@ -233,7 +233,7 @@ QtObject:
|
||||||
x.isContactRequestReceived() and
|
x.isContactRequestReceived() and
|
||||||
not x.isContactRequestSent() and
|
not x.isContactRequestSent() and
|
||||||
not x.isContactRemoved() and
|
not x.isContactRemoved() and
|
||||||
# not x.isReceivedContactRequestRejected() and
|
not x.isReceivedContactRequestRejected() and
|
||||||
not x.isBlocked())
|
not x.isBlocked())
|
||||||
elif (group == ContactsGroup.OutgoingPendingContactRequests):
|
elif (group == ContactsGroup.OutgoingPendingContactRequests):
|
||||||
return contacts.filter(x => x.id != myPubKey and
|
return contacts.filter(x => x.id != myPubKey and
|
||||||
|
@ -242,12 +242,11 @@ QtObject:
|
||||||
# not x.isSentContactRequestRejected() and
|
# not x.isSentContactRequestRejected() and
|
||||||
not x.isContactRemoved() and
|
not x.isContactRemoved() and
|
||||||
not x.isBlocked())
|
not x.isBlocked())
|
||||||
# Temporary commented until we provide appropriate flags on the `status-go` side to cover all sections.
|
elif (group == ContactsGroup.IncomingRejectedContactRequests):
|
||||||
# elif (group == ContactsGroup.IncomingRejectedContactRequests):
|
return contacts.filter(x => x.id != myPubKey and
|
||||||
# return contacts.filter(x => x.id != myPubKey and
|
x.isContactRequestReceived() and
|
||||||
# x.isContactRequestReceived() and
|
x.isReceivedContactRequestRejected() and
|
||||||
# x.isReceivedContactRequestRejected() and
|
not x.isBlocked())
|
||||||
# not x.isBlocked())
|
|
||||||
# elif (group == ContactsGroup.OutgoingRejectedContactRequests):
|
# elif (group == ContactsGroup.OutgoingRejectedContactRequests):
|
||||||
# return contacts.filter(x => x.id != myPubKey and
|
# return contacts.filter(x => x.id != myPubKey and
|
||||||
# x.isContactRequestSent() and
|
# x.isContactRequestSent() and
|
||||||
|
|
Loading…
Reference in New Issue