mirror of
https://github.com/status-im/status-go.git
synced 2025-01-09 22:26:30 +00:00
156c0de832
This commit adds an endpoint to batch the sending of messages. This is useful to simplify client logic when sending a batch of messages and ensuring the correct order in the message stream. It currently implements only what's needed, and naively return an error if any of the messages fail.
54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
package protocol
|
|
|
|
import (
|
|
"github.com/status-im/status-go/protocol/common"
|
|
"github.com/status-im/status-go/protocol/encryption/multidevice"
|
|
)
|
|
|
|
type MessengerResponse struct {
|
|
Chats []*Chat `json:"chats,omitempty"`
|
|
Messages []*common.Message `json:"messages,omitempty"`
|
|
Contacts []*Contact `json:"contacts,omitempty"`
|
|
Installations []*multidevice.Installation `json:"installations,omitempty"`
|
|
EmojiReactions []*EmojiReaction `json:"emojiReactions,omitempty"`
|
|
Invitations []*GroupChatInvitation `json:"invitations,omitempty"`
|
|
}
|
|
|
|
func (m *MessengerResponse) IsEmpty() bool {
|
|
return len(m.Chats) == 0 && len(m.Messages) == 0 && len(m.Contacts) == 0 && len(m.Installations) == 0 && len(m.Invitations) == 0
|
|
}
|
|
|
|
func (m *MessengerResponse) Merge(response *MessengerResponse) error {
|
|
if len(response.Contacts)+len(response.Installations)+len(response.EmojiReactions)+len(response.Invitations) != 0 {
|
|
return ErrNotImplemented
|
|
}
|
|
|
|
for _, overrideChat := range response.Chats {
|
|
var found = false
|
|
for idx, chat := range m.Chats {
|
|
if chat.ID == overrideChat.ID {
|
|
m.Chats[idx] = overrideChat
|
|
found = true
|
|
}
|
|
}
|
|
if !found {
|
|
m.Chats = append(m.Chats, overrideChat)
|
|
}
|
|
}
|
|
|
|
for _, overrideMessage := range response.Messages {
|
|
var found = false
|
|
for idx, chat := range m.Messages {
|
|
if chat.ID == overrideMessage.ID {
|
|
m.Messages[idx] = overrideMessage
|
|
found = true
|
|
}
|
|
}
|
|
if !found {
|
|
m.Messages = append(m.Messages, overrideMessage)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|