summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/client/ui/core/chat/chat.go63
-rw-r--r--internal/client/ui/core/memberlist/memberlist.go49
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