Skip to content
This repository has been archived by the owner on Feb 4, 2022. It is now read-only.

Commit

Permalink
fix: introduce missing contact related RPC APIs (#110)
Browse files Browse the repository at this point in the history
There was a breaking change in status-go that has removed the
`saveContact` API which `status-lib` has used in various places to perform
changes on contact data.

There are now more dedicated APIs for contact related actions,
such as: `AddContact`, `RemoveContact`, `BlockContact` etc.

This commit introduces APIs for these RPC calls and adjusts other
APIs that relied on `saveContact` before.
  • Loading branch information
0x-r4bbit authored Nov 23, 2021
1 parent 6c7deb8 commit 4ff2b68
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 42 deletions.
16 changes: 4 additions & 12 deletions status/contacts.nim
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,11 @@ proc getContactByID*(self: ContactModel, id: string): Profile =
return status_contacts.getContactByID(id)

proc blockContact*(self: ContactModel, id: string) =
var contact = self.getContactByID(id)
contact.blocked = true
self.saveContact(contact)
status_contacts.blockContact(id)
self.events.emit("contactBlocked", ContactIdArgs(id: id))

proc unblockContact*(self: ContactModel, id: string) =
var contact = self.getContactByID(id)
contact.blocked = false
self.saveContact(contact)
status_contacts.unblockContact(id)
self.events.emit("contactUnblocked", ContactIdArgs(id: id))

proc getContacts*(self: ContactModel, useCache: bool = true): seq[Profile] =
Expand Down Expand Up @@ -83,7 +79,7 @@ proc setNickName*(self: ContactModel, id: string, localNickname: string, account
localNickname

contact.localNickname = nickname
self.saveContact(contact)
status_contacts.setContactLocalNickname(id, nickname);
self.events.emit("contactAdded", Args())
sendContactUpdate(contact.id, accountKeyUID)

Expand Down Expand Up @@ -119,11 +115,7 @@ proc addContact*(self: ContactModel, id: string, accountKeyUID: string) =
self.events.emit("contactUpdate", ContactUpdateArgs(contacts: @[profile]))

proc removeContact*(self: ContactModel, id: string) =
let contact = self.getContactByID(id)
contact.added = false
contact.hasAddedUs = false

self.saveContact(contact)
status_contacts.removeContact(id)
self.events.emit("contactRemoved", Args())

proc isAdded*(self: ContactModel, id: string): bool =
Expand Down
45 changes: 32 additions & 13 deletions status/statusgo_backend/contacts.nim
Original file line number Diff line number Diff line change
Expand Up @@ -47,25 +47,44 @@ proc getContactsIndex*(): (Table[string, Profile], bool)=
discard getContacts()
return (contactsIndex, false)

proc blockContact*(id: string) =
discard callPrivateRPC("blockContact".prefix, %* [id])
dirty.store(true)

proc unblockContact*(id: string) =
discard callPrivateRPC("unblockContact".prefix, %* [id])
dirty.store(true)

proc removeContact*(id: string) =
discard callPrivateRPC("removeContact".prefix, %* [id])
dirty.store(true)

proc rejectContactRequest*(id: string) =
let payload = %*[{
"id": id
}]
discard callPrivateRPC("rejectContactRequest".prefix, payload)
dirty.store(true)

proc setContactLocalNickname*(id: string, name: string) =
let payload = %* [{
"id": id,
"nickname": name
}]
discard callPrivateRPC("setContactLocalNickname".prefix, payload)
dirty.store(true)

proc saveContact*(id: string, ensVerified: bool, ensName: string, alias: string,
identicon: string, thumbnail: string, largeImage: string, added: bool, blocked: bool,
hasAddedUs: bool, localNickname: string) =
# TODO: Most of these method arguments aren't used anymore
# as status-go's RPC API became smarter. Should remove those.
let payload = %* [{
"id": id,
"name": ensName,
"ensVerified": ensVerified,
"alias": alias,
"identicon": identicon,
"images": {
"thumbnail": {"Payload": thumbnail.partition(",")[2]},
"large": {"Payload": largeImage.partition(",")[2]}
},
"added": added,
"blocked": blocked,
"hasAddedUs": hasAddedUs,
"localNickname": localNickname
"ensName": ensName
}]
discard callPrivateRPC("saveContact".prefix, payload)

discard callPrivateRPC("addContact".prefix, payload)
dirty.store(true)

proc sendContactUpdate*(publicKey: string, accountKeyUID: string) =
Expand Down
45 changes: 29 additions & 16 deletions status/statusgo_backend_new/contacts.nim
Original file line number Diff line number Diff line change
Expand Up @@ -12,30 +12,43 @@ proc getContactById*(id: string): RpcResponse[JsonNode] {.raises: [Exception].}
let payload = %* [id]
result = callPrivateRPC("getContactByID".prefix, payload)

proc blockContact*(id: string) =
discard callPrivateRPC("blockContact".prefix, %* [id])

proc unblockContact*(id: string) =
discard callPrivateRPC("unblockContact".prefix, %* [id])

proc removeContact*(id: string) =
discard callPrivateRPC("removeContact".prefix, %* [id])

proc rejectContactRequest*(id: string) =
let payload = %*[{
"id": id
}]
discard callPrivateRPC("rejectContactRequest".prefix, payload)

proc setContactLocalNickname*(id: string, name: string) =
let payload = %* [{
"id": id,
"nickname": name
}]
discard callPrivateRPC("setContactLocalNickname".prefix, payload)

proc saveContact*(id: string, ensVerified: bool, ensName: string, alias: string,
identicon: string, thumbnail: string, largeImage: string, added: bool,
blocked: bool, hasAddedUs: bool, localNickname: string)
{.raises: [Exception].} =
# TODO: Most of these method arguments aren't used anymore
# as status-go's RPC API became smarter. Should remove those.
let payload = %* [{
"id": id,
"name": ensName,
"ensVerified": ensVerified,
"alias": alias,
"identicon": identicon,
"images": {
"thumbnail": {"Payload": thumbnail.partition(",")[2]},
"large": {"Payload": largeImage.partition(",")[2]}
},
"added": added,
"blocked": blocked,
"hasAddedUs": hasAddedUs,
"localNickname": localNickname
}]
"id": id,
"ensName": ensName
}]

discard callPrivateRPC("saveContact".prefix, payload)
discard callPrivateRPC("addContact".prefix, payload)

proc sendContactUpdate*(publicKey, ensName, thumbnail: string)
{.raises: [Exception].} =
let payload = %* [publicKey, ensName, thumbnail]
discard callPrivateRPC("sendContactUpdate".prefix, payload)


2 changes: 1 addition & 1 deletion vendor/status-go
Submodule status-go updated 37 files
+1 −1 VERSION
+10 −0 eth-node/bridge/geth/waku.go
+8 −0 eth-node/bridge/geth/wakuv2.go
+1 −1 eth-node/types/envelopes.go
+4 −0 eth-node/types/waku.go
+1 −1 go.mod
+2 −2 go.sum
+2 −0 node/status_node_services.go
+12 −0 params/config.go
+2 −1 protocol/activity_center_persistence.go
+35 −0 protocol/messenger_contact_update_test.go
+32 −0 protocol/messenger_contacts.go
+9 −0 protocol/messenger_discv5.go
+29 −10 protocol/messenger_handler.go
+20 −0 protocol/messenger_handler_test.go
+21 −0 protocol/requests/reject_contact_request.go
+27 −27 protocol/transport/envelopes_monitor.go
+7 −7 protocol/transport/envelopes_monitor_test.go
+8 −0 protocol/transport/transport.go
+12 −0 services/ext/api.go
+2 −2 services/ext/service.go
+453 −0 vendor/github.com/status-im/go-waku/waku/v2/discv5/discover.go
+3 −14 vendor/github.com/status-im/go-waku/waku/v2/dnsdisc/enr.go
+1 −1 vendor/github.com/status-im/go-waku/waku/v2/dnsdisc/resolver.go
+1 −1 vendor/github.com/status-im/go-waku/waku/v2/node/connectedness.go
+188 −10 vendor/github.com/status-im/go-waku/waku/v2/node/wakunode2.go
+58 −25 vendor/github.com/status-im/go-waku/waku/v2/node/wakuoptions.go
+19 −62 vendor/github.com/status-im/go-waku/waku/v2/protocol/filter/waku_filter.go
+52 −0 vendor/github.com/status-im/go-waku/waku/v2/protocol/filter/waku_filter_option.go
+8 −4 vendor/github.com/status-im/go-waku/waku/v2/protocol/lightpush/waku_lightpush.go
+28 −35 vendor/github.com/status-im/go-waku/waku/v2/protocol/relay/waku_relay.go
+9 −6 vendor/github.com/status-im/go-waku/waku/v2/protocol/store/message_queue.go
+68 −0 vendor/github.com/status-im/go-waku/waku/v2/utils/peer.go
+1 −1 vendor/github.com/status-im/go-waku/waku/v2/utils/public_key.go
+3 −2 vendor/modules.txt
+42 −0 wakuv2/config.go
+45 −50 wakuv2/waku.go

0 comments on commit 4ff2b68

Please sign in to comment.