summaryrefslogtreecommitdiff
path: root/internal/client/ui/core/chat/chat.go
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-01-21 18:54:57 +0200
committerKyren223 <Kyren223@proton.me>2025-01-21 18:54:57 +0200
commitc2b1df4e65fea7f0008bdb91db10911076d8fb13 (patch)
treebbc82e0c3fd2b0e941a4a8adb8c20a258f0380ad /internal/client/ui/core/chat/chat.go
parentc02511af29295973c30b2a95c86ee9c40f764591 (diff)
Added the ability to mute/unmute members
Diffstat (limited to 'internal/client/ui/core/chat/chat.go')
-rw-r--r--internal/client/ui/core/chat/chat.go79
1 files changed, 79 insertions, 0 deletions
diff --git a/internal/client/ui/core/chat/chat.go b/internal/client/ui/core/chat/chat.go
index 888ecd1..d1c9671 100644
--- a/internal/client/ui/core/chat/chat.go
+++ b/internal/client/ui/core/chat/chat.go
@@ -72,6 +72,9 @@ var (
Background(colors.BackgroundDim).
AlignHorizontal(lipgloss.Center).
Border(lipgloss.ThickBorder(), false, false, true)
+
+ MutedSymbol = lipgloss.NewStyle().
+ Foreground(colors.Red).Render(" 󱡣")
)
const (
@@ -200,6 +203,7 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
m.borderStyle = ViFocusedBorder
m.style = focusStyle
m.vi.SetInactive(false)
+ m.vi.Focus()
if m.editingMessage != nil {
m.borderStyle = ViEditBorder
m.style = editStyle
@@ -358,6 +362,76 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
Network: *state.NetworkId(m.networkIndex),
User: member.UserID,
})
+ case "M":
+ if m.selectedMessage == nil {
+ return m, nil
+ }
+ networkId := state.NetworkId(m.networkIndex)
+ network := state.State.Networks[*networkId]
+ senderId := m.selectedMessage.SenderID
+ member := state.State.Members[*networkId][senderId]
+
+ if member.IsMuted {
+ return m, nil
+ }
+
+ if !state.State.Members[*networkId][*state.UserID].IsAdmin {
+ return m, nil
+ }
+
+ if member.UserID == *state.UserID {
+ return m, nil
+ }
+
+ if member.IsAdmin && network.OwnerID != *state.UserID {
+ return m, nil
+ }
+
+ yes := true
+ return m, gateway.Send(&packet.SetMember{
+ Member: nil,
+ Admin: nil,
+ Muted: &yes,
+ Banned: nil,
+ BanReason: nil,
+ Network: *state.NetworkId(m.networkIndex),
+ User: member.UserID,
+ })
+ case "U":
+ if m.selectedMessage == nil {
+ return m, nil
+ }
+ networkId := state.NetworkId(m.networkIndex)
+ network := state.State.Networks[*networkId]
+ senderId := m.selectedMessage.SenderID
+ member := state.State.Members[*networkId][senderId]
+
+ if !member.IsMuted {
+ return m, nil
+ }
+
+ if !state.State.Members[*networkId][*state.UserID].IsAdmin {
+ return m, nil
+ }
+
+ if member.UserID == *state.UserID {
+ return m, nil
+ }
+
+ if member.IsAdmin && network.OwnerID != *state.UserID {
+ return m, nil
+ }
+
+ no := false
+ return m, gateway.Send(&packet.SetMember{
+ Member: nil,
+ Admin: nil,
+ Muted: &no,
+ Banned: nil,
+ BanReason: nil,
+ Network: *state.NetworkId(m.networkIndex),
+ User: member.UserID,
+ })
case "B":
// TODO: ban
@@ -872,6 +946,11 @@ func (m *Model) renderHeader(message data.Message, selected bool) []byte {
sender := senderStyle.Render(user.Name)
buf = append(buf, sender...)
+
+ if member.IsMuted {
+ buf = append(buf, []byte(MutedSymbol)...)
+ }
+
} else if m.receiverIndex != -1 {
// TODO: receiver
}