Fix sync of blocked contacts (#2764)
This commit is contained in:
parent
3cd92fda78
commit
4aa341395c
|
@ -551,10 +551,11 @@ func (m *Messenger) blockContact(contactID string, isDesktopFunc bool) ([]*Chat,
|
||||||
contact.Block()
|
contact.Block()
|
||||||
}
|
}
|
||||||
|
|
||||||
_, retractErr := m.retractContactRequest(contact)
|
err := m.sendRetractContactRequest(contact)
|
||||||
if retractErr != nil {
|
if err != nil {
|
||||||
return nil, retractErr
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
contact.LastUpdatedLocally = m.getTimesource().GetCurrentTime()
|
contact.LastUpdatedLocally = m.getTimesource().GetCurrentTime()
|
||||||
|
|
||||||
chats, err := m.persistence.BlockContact(contact, isDesktopFunc)
|
chats, err := m.persistence.BlockContact(contact, isDesktopFunc)
|
||||||
|
@ -774,50 +775,6 @@ func (m *Messenger) addENSNameToContact(contact *Contact) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Messenger) retractContactRequest(contact *Contact) (*MessengerResponse, error) {
|
|
||||||
contact.HasAddedUs = false
|
|
||||||
m.allContacts.Store(contact.ID, contact)
|
|
||||||
response := &MessengerResponse{}
|
|
||||||
err := m.removeContact(context.Background(), response, contact.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
chat, ok := m.allChats.Load(contact.ID)
|
|
||||||
if !ok {
|
|
||||||
pubKey, err := contact.PublicKey()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
chat = OneToOneFromPublicKey(pubKey, m.getTimesource())
|
|
||||||
chat.Active = false
|
|
||||||
if err := m.saveChat(chat); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
clock, _ := chat.NextClockAndTimestamp(m.getTimesource())
|
|
||||||
retractContactRequest := &protobuf.RetractContactRequest{
|
|
||||||
Clock: clock,
|
|
||||||
}
|
|
||||||
encodedMessage, err := proto.Marshal(retractContactRequest)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = m.dispatchMessage(context.Background(), common.RawMessage{
|
|
||||||
LocalChatID: contact.ID,
|
|
||||||
Payload: encodedMessage,
|
|
||||||
MessageType: protobuf.ApplicationMetadataMessage_RETRACT_CONTACT_REQUEST,
|
|
||||||
ResendAutomatically: true,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return response, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Messenger) RetractContactRequest(request *requests.RetractContactRequest) (*MessengerResponse, error) {
|
func (m *Messenger) RetractContactRequest(request *requests.RetractContactRequest) (*MessengerResponse, error) {
|
||||||
err := request.Validate()
|
err := request.Validate()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -827,8 +784,55 @@ func (m *Messenger) RetractContactRequest(request *requests.RetractContactReques
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.New("contact not found")
|
return nil, errors.New("contact not found")
|
||||||
}
|
}
|
||||||
|
contact.HasAddedUs = false
|
||||||
|
m.allContacts.Store(contact.ID, contact)
|
||||||
|
response := &MessengerResponse{}
|
||||||
|
err = m.removeContact(context.Background(), response, contact.ID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return m.retractContactRequest(contact)
|
err = m.sendRetractContactRequest(contact)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send message to remote account to remove our contact from their end.
|
||||||
|
func (m *Messenger) sendRetractContactRequest(contact *Contact) error {
|
||||||
|
chat, ok := m.allChats.Load(contact.ID)
|
||||||
|
if !ok {
|
||||||
|
pubKey, err := contact.PublicKey()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
chat = OneToOneFromPublicKey(pubKey, m.getTimesource())
|
||||||
|
chat.Active = false
|
||||||
|
if err := m.saveChat(chat); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
clock, _ := chat.NextClockAndTimestamp(m.getTimesource())
|
||||||
|
retractContactRequest := &protobuf.RetractContactRequest{
|
||||||
|
Clock: clock,
|
||||||
|
}
|
||||||
|
|
||||||
|
encodedMessage, err := proto.Marshal(retractContactRequest)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = m.dispatchMessage(context.Background(), common.RawMessage{
|
||||||
|
LocalChatID: contact.ID,
|
||||||
|
Payload: encodedMessage,
|
||||||
|
MessageType: protobuf.ApplicationMetadataMessage_RETRACT_CONTACT_REQUEST,
|
||||||
|
ResendAutomatically: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Messenger) AcceptLatestContactRequestForContact(ctx context.Context, request *requests.AcceptLatestContactRequestForContact) (*MessengerResponse, error) {
|
func (m *Messenger) AcceptLatestContactRequestForContact(ctx context.Context, request *requests.AcceptLatestContactRequestForContact) (*MessengerResponse, error) {
|
||||||
|
|
Loading…
Reference in New Issue