Files
libredesk/internal/conversation/ws.go
Abhinav Raut 0c01b53b09 feat(conversations): add trigram index for searching ref numbers
feat(messages): add trigram index for text content search
- feat: UI animations for conversation and messages list.
- Simplify websocket updates.
2025-01-19 23:10:53 +05:30

63 lines
1.8 KiB
Go

package conversation
import (
"encoding/json"
wsmodels "github.com/abhinavxd/libredesk/internal/ws/models"
)
// BroadcastNewMessage broadcasts a new message to all users.
func (m *Manager) BroadcastNewMessage(conversationUUID, content, messageUUID, lastMessageAt, typ string, private bool) {
message := wsmodels.Message{
Type: wsmodels.MessageTypeNewMessage,
Data: map[string]interface{}{
"conversation_uuid": conversationUUID,
"content": content,
"created_at": lastMessageAt,
"uuid": messageUUID,
"private": private,
"type": typ,
},
}
m.broadcastToUsers([]int{}, message)
}
// BroadcastMessageUpdate broadcasts a message update to all users.
func (m *Manager) BroadcastMessageUpdate(conversationUUID, messageUUID, prop string, value any) {
message := wsmodels.Message{
Type: wsmodels.MessageTypeMessagePropUpdate,
Data: map[string]interface{}{
"uuid": messageUUID,
"prop": prop,
"value": value,
},
}
m.broadcastToUsers([]int{}, message)
}
// BroadcastConversationUpdate broadcasts a conversation update to all users.
func (m *Manager) BroadcastConversationUpdate(conversationUUID, prop string, value any) {
message := wsmodels.Message{
Type: wsmodels.MessageTypeConversationPropertyUpdate,
Data: map[string]interface{}{
"uuid": conversationUUID,
"prop": prop,
"value": value,
},
}
m.broadcastToUsers([]int{}, message)
}
// broadcastToUsers broadcasts a message to a list of users, if the list is empty it broadcasts to all users.
func (m *Manager) broadcastToUsers(userIDs []int, message wsmodels.Message) {
messageBytes, err := json.Marshal(message)
if err != nil {
m.lo.Error("error marshalling WS message", "error", err)
return
}
m.wsHub.BroadcastMessage(wsmodels.BroadcastMessage{
Data: messageBytes,
Users: userIDs,
})
}