mirror of
https://github.com/status-im/status-go.git
synced 2025-02-12 23:06:51 +00:00
Update AC notification on EditMessage
This commit is contained in:
parent
2bcd7e97a6
commit
7360e07224
@ -2940,6 +2940,30 @@ func (r *ReceivedMessageState) addNewMessageNotification(publicKey ecdsa.PublicK
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// updateExistingActivityCenterNotification updates AC notification if it exists and hasn't been read yet
|
||||||
|
func (r *ReceivedMessageState) updateExistingActivityCenterNotification(publicKey ecdsa.PublicKey, m *Messenger, message *common.Message, responseTo *common.Message) error {
|
||||||
|
notification, err := m.persistence.GetActivityCenterNotificationByID(types.FromHex(message.ID))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if notification == nil || notification.Read {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
notification.Message = message
|
||||||
|
notification.ReplyMessage = responseTo
|
||||||
|
|
||||||
|
err = m.persistence.SaveActivityCenterNotification(notification)
|
||||||
|
if err != nil {
|
||||||
|
m.logger.Error("failed to save notification", zap.Error(err))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
r.Response.AddActivityCenterNotification(notification)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// addNewActivityCenterNotification takes a common.Message and generates a new ActivityCenterNotification and appends it to the
|
// addNewActivityCenterNotification takes a common.Message and generates a new ActivityCenterNotification and appends it to the
|
||||||
// []Response.ActivityCenterNotifications if the message is m.New
|
// []Response.ActivityCenterNotifications if the message is m.New
|
||||||
func (r *ReceivedMessageState) addNewActivityCenterNotification(publicKey ecdsa.PublicKey, m *Messenger, message *common.Message, responseTo *common.Message) error {
|
func (r *ReceivedMessageState) addNewActivityCenterNotification(publicKey ecdsa.PublicKey, m *Messenger, message *common.Message, responseTo *common.Message) error {
|
||||||
@ -3194,7 +3218,6 @@ func (m *Messenger) handleRetrievedMessages(chatWithMessages map[transport.Filte
|
|||||||
defer m.handleMessagesMutex.Unlock()
|
defer m.handleMessagesMutex.Unlock()
|
||||||
|
|
||||||
messageState := m.buildMessageState()
|
messageState := m.buildMessageState()
|
||||||
response := messageState.Response
|
|
||||||
|
|
||||||
logger := m.logger.With(zap.String("site", "RetrieveAll"))
|
logger := m.logger.With(zap.String("site", "RetrieveAll"))
|
||||||
|
|
||||||
@ -3320,7 +3343,7 @@ func (m *Messenger) handleRetrievedMessages(chatWithMessages map[transport.Filte
|
|||||||
ID: messageID,
|
ID: messageID,
|
||||||
SigPubKey: publicKey,
|
SigPubKey: publicKey,
|
||||||
}
|
}
|
||||||
err = m.HandleEditMessage(response, editMessage)
|
err = m.HandleEditMessage(messageState, editMessage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Warn("failed to handle EditMessage", zap.Error(err))
|
logger.Warn("failed to handle EditMessage", zap.Error(err))
|
||||||
allMessagesProcessed = false
|
allMessagesProcessed = false
|
||||||
|
@ -252,16 +252,18 @@ func (s *MessengerEditMessageSuite) TestEditMessageEdgeCases() {
|
|||||||
From: wrongContact.ID,
|
From: wrongContact.ID,
|
||||||
}
|
}
|
||||||
|
|
||||||
response = &MessengerResponse{}
|
state := &ReceivedMessageState{
|
||||||
|
Response: &MessengerResponse{},
|
||||||
|
AllChats: &chatMap{},
|
||||||
|
}
|
||||||
|
state.AllChats.Store(ourChat.ID, ourChat)
|
||||||
|
|
||||||
err = s.m.HandleEditMessage(response, editMessage)
|
err = s.m.HandleEditMessage(state, editMessage)
|
||||||
// It should error as the user can't edit this message
|
// It should error as the user can't edit this message
|
||||||
s.Require().Error(err)
|
s.Require().Error(err)
|
||||||
|
|
||||||
// Edit with a newer clock value
|
// Edit with a newer clock value
|
||||||
|
|
||||||
response = &MessengerResponse{}
|
|
||||||
|
|
||||||
contact, err := BuildContactFromPublicKey(&theirMessenger.identity.PublicKey)
|
contact, err := BuildContactFromPublicKey(&theirMessenger.identity.PublicKey)
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
|
|
||||||
@ -276,15 +278,15 @@ func (s *MessengerEditMessageSuite) TestEditMessageEdgeCases() {
|
|||||||
From: contact.ID,
|
From: contact.ID,
|
||||||
}
|
}
|
||||||
|
|
||||||
err = s.m.HandleEditMessage(response, editMessage)
|
err = s.m.HandleEditMessage(state, editMessage)
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
// It save the edit
|
// It save the edit
|
||||||
s.Require().Len(response.Messages(), 1)
|
s.Require().Len(state.Response.Messages(), 1)
|
||||||
s.Require().Len(response.Chats(), 1)
|
s.Require().Len(state.Response.Chats(), 1)
|
||||||
s.Require().NotNil(response.Chats()[0].LastMessage)
|
s.Require().NotNil(state.Response.Chats()[0].LastMessage)
|
||||||
s.Require().NotEmpty(response.Chats()[0].LastMessage.EditedAt)
|
s.Require().NotEmpty(state.Response.Chats()[0].LastMessage.EditedAt)
|
||||||
|
|
||||||
editedMessage = response.Messages()[0]
|
editedMessage = state.Response.Messages()[0]
|
||||||
|
|
||||||
// In-between edit
|
// In-between edit
|
||||||
editMessage = EditMessage{
|
editMessage = EditMessage{
|
||||||
@ -298,13 +300,13 @@ func (s *MessengerEditMessageSuite) TestEditMessageEdgeCases() {
|
|||||||
From: contact.ID,
|
From: contact.ID,
|
||||||
}
|
}
|
||||||
|
|
||||||
response = &MessengerResponse{}
|
state.Response = &MessengerResponse{}
|
||||||
|
|
||||||
err = s.m.HandleEditMessage(response, editMessage)
|
err = s.m.HandleEditMessage(state, editMessage)
|
||||||
// It should error as the user can't edit this message
|
// It should error as the user can't edit this message
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
// It discards the edit
|
// It discards the edit
|
||||||
s.Require().Len(response.Messages(), 0)
|
s.Require().Len(state.Response.Messages(), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *MessengerEditMessageSuite) TestEditMessageFirstEditsThenMessage() {
|
func (s *MessengerEditMessageSuite) TestEditMessageFirstEditsThenMessage() {
|
||||||
@ -336,16 +338,17 @@ func (s *MessengerEditMessageSuite) TestEditMessageFirstEditsThenMessage() {
|
|||||||
},
|
},
|
||||||
From: common.PubkeyToHex(&theirMessenger.identity.PublicKey),
|
From: common.PubkeyToHex(&theirMessenger.identity.PublicKey),
|
||||||
}
|
}
|
||||||
|
state := &ReceivedMessageState{
|
||||||
response := &MessengerResponse{}
|
Response: &MessengerResponse{},
|
||||||
|
}
|
||||||
|
|
||||||
// Handle edit first
|
// Handle edit first
|
||||||
err = s.m.HandleEditMessage(response, editMessage)
|
err = s.m.HandleEditMessage(state, editMessage)
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
|
|
||||||
// Handle chat message
|
// Handle chat message
|
||||||
response = &MessengerResponse{}
|
response := &MessengerResponse{}
|
||||||
state := &ReceivedMessageState{
|
state = &ReceivedMessageState{
|
||||||
Response: response,
|
Response: response,
|
||||||
CurrentMessageState: &CurrentMessageState{
|
CurrentMessageState: &CurrentMessageState{
|
||||||
Message: inputMessage.ChatMessage,
|
Message: inputMessage.ChatMessage,
|
||||||
|
@ -1341,13 +1341,13 @@ func (m *Messenger) handleWrappedCommunityDescriptionMessage(payload []byte) (*c
|
|||||||
return m.communitiesManager.HandleWrappedCommunityDescriptionMessage(payload)
|
return m.communitiesManager.HandleWrappedCommunityDescriptionMessage(payload)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Messenger) HandleEditMessage(response *MessengerResponse, editMessage EditMessage) error {
|
func (m *Messenger) HandleEditMessage(state *ReceivedMessageState, editMessage EditMessage) error {
|
||||||
if err := ValidateEditMessage(editMessage.EditMessage); err != nil {
|
if err := ValidateEditMessage(editMessage.EditMessage); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
messageID := editMessage.MessageId
|
messageID := editMessage.MessageId
|
||||||
// Check if it's already in the response
|
// Check if it's already in the response
|
||||||
originalMessage := response.GetMessage(messageID)
|
originalMessage := state.Response.GetMessage(messageID)
|
||||||
// otherwise pull from database
|
// otherwise pull from database
|
||||||
if originalMessage == nil {
|
if originalMessage == nil {
|
||||||
var err error
|
var err error
|
||||||
@ -1391,8 +1391,18 @@ func (m *Messenger) HandleEditMessage(response *MessengerResponse, editMessage E
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
response.AddMessage(originalMessage)
|
responseTo, err := m.persistence.MessageByID(originalMessage.ResponseTo)
|
||||||
response.AddChat(chat)
|
|
||||||
|
if err != nil && err != common.ErrRecordNotFound {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = state.updateExistingActivityCenterNotification(m.identity.PublicKey, m, originalMessage, responseTo)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
state.Response.AddMessage(originalMessage)
|
||||||
|
state.Response.AddChat(chat)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user