diff options
| author | Kyren223 <Kyren223@proton.me> | 2025-01-21 18:17:36 +0200 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2025-01-21 18:17:36 +0200 |
| commit | 8f87941f91fa4a3e98c4797b9c700b21d5037ade (patch) | |
| tree | 5452be731d0dceafd0a43a5ce12643eb1700eb0e /internal | |
| parent | 7a791d7e940a74860fe0a1dad908eddf2585797a (diff) | |
Added the ability to promote members to admins and demote admins to
members
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/client/ui/core/chat/chat.go | 63 | ||||
| -rw-r--r-- | internal/client/ui/core/memberlist/memberlist.go | 49 |
2 files changed, 108 insertions, 4 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 + } } diff --git a/internal/client/ui/core/memberlist/memberlist.go b/internal/client/ui/core/memberlist/memberlist.go index d18689d..764613d 100644 --- a/internal/client/ui/core/memberlist/memberlist.go +++ b/internal/client/ui/core/memberlist/memberlist.go @@ -158,7 +158,6 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { // Admin case "x", "K": - // TODO: kick networkId := state.NetworkId(m.networkIndex) network := state.State.Networks[*networkId] member := m.Members()[m.index] @@ -194,9 +193,53 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { // Owner case "D": - // TODO: demote (remove admin) + networkId := state.NetworkId(m.networkIndex) + network := state.State.Networks[*networkId] + member := m.Members()[m.index] + + // 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": - // TODO: promote (add admin) + networkId := state.NetworkId(m.networkIndex) + network := state.State.Networks[*networkId] + member := m.Members()[m.index] + + // 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 |
