From 9d1158f03e63c32c426f3ee9edfce310dd4c2492 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Wed, 5 Feb 2025 16:45:01 +0200 Subject: Implemented deleting messages in user signals --- internal/client/ui/core/chat/chat.go | 55 ++++++++++++++++++++---------------- internal/server/api/api.go | 15 +++++++++- 2 files changed, 45 insertions(+), 25 deletions(-) diff --git a/internal/client/ui/core/chat/chat.go b/internal/client/ui/core/chat/chat.go index 7d4ec6a..6a2e102 100644 --- a/internal/client/ui/core/chat/chat.go +++ b/internal/client/ui/core/chat/chat.go @@ -371,32 +371,38 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { } case "x", "d": - if m.selectedMessage != nil { - log.Println("deleting message:", m.selectedMessage) - cmd = gateway.Send(&packet.DeleteMessage{ - Message: m.selectedMessage.ID, - }) + if m.selectedMessage == nil { + return m, nil } + log.Println("deleting message:", m.selectedMessage) + cmd = gateway.Send(&packet.DeleteMessage{ + Message: m.selectedMessage.ID, + }) case "e": - if m.selectedMessage != nil && m.selectedMessage.SenderID == *state.UserID { - log.Println("editing message:", m.selectedMessage) - m.editingMessage = m.selectedMessage + if m.selectedMessage == nil { + return m, nil + } + if m.selectedMessage.SenderID != *state.UserID { + return m, nil + } - m.vi.Reset() - m.vi.SetString(m.selectedMessage.Content) + log.Println("editing message:", m.selectedMessage) + m.editingMessage = m.selectedMessage - m.locked = true - m.vi.SetMode(viminput.InsertMode) - m.vi.SetCursorLine(len(m.vi.Lines()) - 1) - m.vi.SetCursorColumn(len(m.vi.Lines()[m.vi.CursorLine()])) + m.vi.Reset() + m.vi.SetString(m.selectedMessage.Content) - m.borderStyle = ViEditBorder - m.style = editStyle - } + m.locked = true + m.vi.SetMode(viminput.InsertMode) + m.vi.SetCursorLine(len(m.vi.Lines()) - 1) + m.vi.SetCursorColumn(len(m.vi.Lines()[m.vi.CursorLine()])) + + m.borderStyle = ViEditBorder + m.style = editStyle case "T": - if m.selectedMessage == nil { + if m.selectedMessage == nil || m.receiverIndex != -1 { return m, nil } senderId := m.selectedMessage.SenderID @@ -414,7 +420,7 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { // Admin case "K": - if m.selectedMessage == nil { + if m.selectedMessage == nil || m.receiverIndex != -1 { return m, nil } networkId := state.NetworkId(m.networkIndex) @@ -445,7 +451,7 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { User: member.UserID, }) case "M": - if m.selectedMessage == nil { + if m.selectedMessage == nil || m.receiverIndex != -1 { return m, nil } networkId := state.NetworkId(m.networkIndex) @@ -480,7 +486,7 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { User: member.UserID, }) case "U": - if m.selectedMessage == nil { + if m.selectedMessage == nil || m.receiverIndex != -1 { return m, nil } networkId := state.NetworkId(m.networkIndex) @@ -515,7 +521,7 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { User: member.UserID, }) case "B": - if m.selectedMessage == nil { + if m.selectedMessage == nil || m.receiverIndex != -1 { return m, nil } networkId := state.NetworkId(m.networkIndex) @@ -545,9 +551,10 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { // Owner case "D": - if m.selectedMessage == nil { + if m.selectedMessage == nil || m.receiverIndex != -1 { return m, nil } + networkId := state.NetworkId(m.networkIndex) network := state.State.Networks[*networkId] senderId := m.selectedMessage.SenderID @@ -573,7 +580,7 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { User: member.UserID, }) case "P": - if m.selectedMessage == nil { + if m.selectedMessage == nil || m.receiverIndex != -1 { return m, nil } networkId := state.NetworkId(m.networkIndex) diff --git a/internal/server/api/api.go b/internal/server/api/api.go index a95065c..92679b8 100644 --- a/internal/server/api/api.go +++ b/internal/server/api/api.go @@ -1037,7 +1037,20 @@ func DeleteMessage(ctx context.Context, sess *session.Session, request *packet.D } if message.ReceiverID != nil { - return &ErrNotImplemented + if message.SenderID != sess.ID() { + return &ErrPermissionDenied + } + + err = queries.DeleteMessage(ctx, message.ID) + if err != nil { + log.Println("database error 5:", err) + return &ErrInternalError + } + + return UserPropagate(ctx, sess, *message.ReceiverID, &packet.MessagesInfo{ + Messages: nil, + RemovedMessages: []snowflake.ID{message.ID}, + }) } assert.Never("unreachable") -- cgit v1.3.1