Create contact if not in contacts when setting nickname
This commit is contained in:
parent
f04e5c741c
commit
1cc7546e67
|
@ -3,16 +3,23 @@ package protocol
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
"errors"
|
|
||||||
|
|
||||||
"github.com/golang/protobuf/proto"
|
"github.com/golang/protobuf/proto"
|
||||||
|
|
||||||
"github.com/status-im/status-go/protocol/common"
|
"github.com/status-im/status-go/protocol/common"
|
||||||
"github.com/status-im/status-go/protocol/protobuf"
|
"github.com/status-im/status-go/protocol/protobuf"
|
||||||
|
"github.com/status-im/status-go/protocol/requests"
|
||||||
"github.com/status-im/status-go/protocol/transport"
|
"github.com/status-im/status-go/protocol/transport"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (m *Messenger) AddContact(ctx context.Context, pubKey string) (*MessengerResponse, error) {
|
func (m *Messenger) AddContact(ctx context.Context, request *requests.AddContact) (*MessengerResponse, error) {
|
||||||
|
err := request.Validate()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
pubKey := request.ID.String()
|
||||||
|
|
||||||
contact, ok := m.allContacts.Load(pubKey)
|
contact, ok := m.allContacts.Load(pubKey)
|
||||||
if !ok {
|
if !ok {
|
||||||
var err error
|
var err error
|
||||||
|
@ -22,13 +29,17 @@ func (m *Messenger) AddContact(ctx context.Context, pubKey string) (*MessengerRe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(request.Nickname) != 0 {
|
||||||
|
contact.LocalNickname = request.Nickname
|
||||||
|
}
|
||||||
|
|
||||||
if !contact.Added {
|
if !contact.Added {
|
||||||
contact.Added = true
|
contact.Added = true
|
||||||
}
|
}
|
||||||
contact.LastUpdatedLocally = m.getTimesource().GetCurrentTime()
|
contact.LastUpdatedLocally = m.getTimesource().GetCurrentTime()
|
||||||
|
|
||||||
// We sync the contact with the other devices
|
// We sync the contact with the other devices
|
||||||
err := m.syncContact(context.Background(), contact)
|
err = m.syncContact(context.Background(), contact)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -204,21 +215,37 @@ func (m *Messenger) GetContactByID(pubKey string) *Contact {
|
||||||
return contact
|
return contact
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Messenger) SetContactLocalNickname(pubKey string, nickname string) (*MessengerResponse, error) {
|
func (m *Messenger) SetContactLocalNickname(request *requests.SetContactLocalNickname) (*MessengerResponse, error) {
|
||||||
|
|
||||||
|
if err := request.Validate(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
pubKey := request.ID.String()
|
||||||
|
nickname := request.Nickname
|
||||||
|
|
||||||
contact, ok := m.allContacts.Load(pubKey)
|
contact, ok := m.allContacts.Load(pubKey)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.New("not existing contact")
|
var err error
|
||||||
|
contact, err = buildContactFromPkString(pubKey)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
clock := m.getTimesource().GetCurrentTime()
|
clock := m.getTimesource().GetCurrentTime()
|
||||||
contact.LocalNickname = nickname
|
contact.LocalNickname = nickname
|
||||||
contact.LastUpdatedLocally = clock
|
contact.LastUpdatedLocally = clock
|
||||||
|
|
||||||
|
err := m.persistence.SaveContact(contact, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
response := &MessengerResponse{}
|
response := &MessengerResponse{}
|
||||||
response.Contacts = []*Contact{contact}
|
response.Contacts = []*Contact{contact}
|
||||||
|
|
||||||
err := m.syncContact(context.Background(), contact)
|
err = m.syncContact(context.Background(), contact)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package requests
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"github.com/status-im/status-go/eth-node/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
var ErrAddContactInvalidID = errors.New("add-contact: invalid id")
|
||||||
|
|
||||||
|
type AddContact struct {
|
||||||
|
ID types.HexBytes `json:"id"`
|
||||||
|
Nickname string `json:"nickname"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AddContact) Validate() error {
|
||||||
|
if len(a.ID) == 0 {
|
||||||
|
return ErrAddContactInvalidID
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package requests
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"github.com/status-im/status-go/eth-node/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
var ErrSetContactLocalNicknameInvalidID = errors.New("add-contact: invalid id")
|
||||||
|
|
||||||
|
type SetContactLocalNickname struct {
|
||||||
|
ID types.HexBytes `json:"id"`
|
||||||
|
Nickname string `json:"nickname"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *SetContactLocalNickname) Validate() error {
|
||||||
|
if len(a.ID) == 0 {
|
||||||
|
return ErrSetContactLocalNicknameInvalidID
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -588,16 +588,16 @@ func (api *PublicAPI) MarkAllReadInCommunity(communityID string) ([]string, erro
|
||||||
return api.service.messenger.MarkAllReadInCommunity(communityID)
|
return api.service.messenger.MarkAllReadInCommunity(communityID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PublicAPI) AddContact(ctx context.Context, pubKey string) (*protocol.MessengerResponse, error) {
|
func (api *PublicAPI) AddContact(ctx context.Context, request *requests.AddContact) (*protocol.MessengerResponse, error) {
|
||||||
return api.service.messenger.AddContact(ctx, pubKey)
|
return api.service.messenger.AddContact(ctx, request)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PublicAPI) RemoveContact(ctx context.Context, pubKey string) (*protocol.MessengerResponse, error) {
|
func (api *PublicAPI) RemoveContact(ctx context.Context, pubKey string) (*protocol.MessengerResponse, error) {
|
||||||
return api.service.messenger.RemoveContact(ctx, pubKey)
|
return api.service.messenger.RemoveContact(ctx, pubKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PublicAPI) SetContactLocalNickname(ctx context.Context, pubKey, nickname string) (*protocol.MessengerResponse, error) {
|
func (api *PublicAPI) SetContactLocalNickname(ctx context.Context, request *requests.SetContactLocalNickname) (*protocol.MessengerResponse, error) {
|
||||||
return api.service.messenger.SetContactLocalNickname(pubKey, nickname)
|
return api.service.messenger.SetContactLocalNickname(request)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PublicAPI) ClearHistory(request *requests.ClearHistory) (*protocol.MessengerResponse, error) {
|
func (api *PublicAPI) ClearHistory(request *requests.ClearHistory) (*protocol.MessengerResponse, error) {
|
||||||
|
|
Loading…
Reference in New Issue