mirror of
https://github.com/abhinavxd/libredesk.git
synced 2025-11-03 13:33:32 +00:00
feat(messages): add trigram index for text content search - feat: UI animations for conversation and messages list. - Simplify websocket updates.
63 lines
1.8 KiB
Go
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,
|
|
})
|
|
}
|