summaryrefslogtreecommitdiff
path: root/internal/client/ui/core/chat/chat.go
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-01-21 18:17:36 +0200
committerKyren223 <Kyren223@proton.me>2025-01-21 18:17:36 +0200
commit8f87941f91fa4a3e98c4797b9c700b21d5037ade (patch)
tree5452be731d0dceafd0a43a5ce12643eb1700eb0e /internal/client/ui/core/chat/chat.go
parent7a791d7e940a74860fe0a1dad908eddf2585797a (diff)
Added the ability to promote members to admins and demote admins to
members
Diffstat (limited to 'internal/client/ui/core/chat/chat.go')
-rw-r--r--internal/client/ui/core/chat/chat.go63
1 files changed, 62 insertions, 1 deletions
diff --git a/internal/client/ui/core/chat/chat.go b/internal/client/ui/core/chat/chat.go
index 184d82e..b67e0bf 100644
--- a/internal/client/ui/core/chat/chat.go
+++ b/internal/client/ui/core/chat/chat.go
@@ -301,7 +301,7 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
m.SetIndex(Unselected)
}
- case "x", "X", "d", "D":
+ case "x", "d":
if m.selectedMessage != nil {
log.Println("deleting message:", m.selectedMessage)
cmd = gateway.Send(&packet.DeleteMessage{
@@ -325,6 +325,67 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
m.borderStyle = ViEditBorder
m.style = editStyle
}
+
+ // Owner
+ case "D":
+ 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]
+
+ // Can't demote yourself
+ 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: &no,
+ Muted: nil,
+ Banned: nil,
+ BanReason: nil,
+ Network: *state.NetworkId(m.networkIndex),
+ User: member.UserID,
+ })
+ case "P":
+ 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]
+
+ // Can't promote yourself
+ 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: &yes,
+ Muted: nil,
+ Banned: nil,
+ BanReason: nil,
+ Network: *state.NetworkId(m.networkIndex),
+ User: member.UserID,
+ })
+ case "T":
+ // TODO: transfer ownership
+
}
}