diff options
Diffstat (limited to 'internal/client/ui/core')
| -rw-r--r-- | internal/client/ui/core/banlist/banlist.go | 39 | ||||
| -rw-r--r-- | internal/client/ui/core/banview/banview.go | 64 | ||||
| -rw-r--r-- | internal/client/ui/core/core.go | 22 | ||||
| -rw-r--r-- | internal/client/ui/core/memberlist/memberlist.go | 3 |
4 files changed, 113 insertions, 15 deletions
diff --git a/internal/client/ui/core/banlist/banlist.go b/internal/client/ui/core/banlist/banlist.go index 5712a67..944095a 100644 --- a/internal/client/ui/core/banlist/banlist.go +++ b/internal/client/ui/core/banlist/banlist.go @@ -166,18 +166,33 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { case "p": // TODO: profile + case "v", "V": + members := m.Members() + if 0 <= m.index && m.index < len(members) { + member := members[m.index] + return m, func() tea.Msg { + return ui.BanViewPopupmsg{ + Network: m.networkId, + User: member.UserID, + } + } + } + case "U": - member := m.Members()[m.index] - no := false - return m, gateway.Send(&packet.SetMember{ - Member: nil, - Admin: nil, - Muted: nil, - Banned: &no, - BanReason: nil, - Network: m.networkId, - User: member.UserID, - }) + members := m.Members() + if 0 <= m.index && m.index < len(members) { + member := members[m.index] + no := false + return m, gateway.Send(&packet.SetMember{ + Member: nil, + Admin: nil, + Muted: nil, + Banned: &no, + BanReason: nil, + Network: m.networkId, + User: member.UserID, + }) + } } } @@ -224,7 +239,7 @@ func (m *Model) Members() []data.Member { return members } -func (m *Model) Index() int { +func (m *Model) ndex() int { return m.index } diff --git a/internal/client/ui/core/banview/banview.go b/internal/client/ui/core/banview/banview.go new file mode 100644 index 0000000..51636f1 --- /dev/null +++ b/internal/client/ui/core/banview/banview.go @@ -0,0 +1,64 @@ +package banview + +import ( + "strconv" + + tea "github.com/charmbracelet/bubbletea" + "github.com/charmbracelet/lipgloss" + "github.com/kyren223/eko/internal/client/ui/colors" + "github.com/kyren223/eko/internal/client/ui/core/state" + "github.com/kyren223/eko/internal/client/ui/layouts/flex" + "github.com/kyren223/eko/pkg/snowflake" +) + +var ( + width = 48 + + style = lipgloss.NewStyle(). + Border(lipgloss.ThickBorder()). + Padding(1, 4). + Align(lipgloss.Center, lipgloss.Center) + + headerStyle = lipgloss.NewStyle().Foreground(colors.Focus) + grayStyle = lipgloss.NewStyle().Foreground(colors.LightGray) +) + +const ( + BanReasonField = iota + BanField + FieldCount +) + +type Model struct { + banReason string + name string + id string +} + +func New(userId, networkId snowflake.ID) Model { + return Model{ + banReason: *state.State.Members[networkId][userId].BanReason, + name: state.State.Users[userId].Name, + id: strconv.FormatInt(int64(userId), 10), + } +} + +func (m Model) Init() tea.Cmd { + return nil +} + +func (m Model) View() string { + nameHeader := headerStyle.Render("Banned Username:") + name := m.name + grayStyle.Render(" ("+m.id+")") + name = lipgloss.NewStyle().Width(width).Render(name) + + banReasonHeader := headerStyle.Render("Ban Reason:") + banReason := lipgloss.NewStyle().Width(width).Render(m.banReason) + + content := flex.NewVertical(nameHeader, name, banReasonHeader, banReason).WithGap(1).View() + return style.Render(content) +} + +func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { + return m, nil +} diff --git a/internal/client/ui/core/core.go b/internal/client/ui/core/core.go index c0b23ff..62c9415 100644 --- a/internal/client/ui/core/core.go +++ b/internal/client/ui/core/core.go @@ -15,6 +15,7 @@ import ( "github.com/kyren223/eko/internal/client/gateway" "github.com/kyren223/eko/internal/client/ui" "github.com/kyren223/eko/internal/client/ui/core/banreason" + "github.com/kyren223/eko/internal/client/ui/core/banview" "github.com/kyren223/eko/internal/client/ui/core/chat" "github.com/kyren223/eko/internal/client/ui/core/frequencycreation" "github.com/kyren223/eko/internal/client/ui/core/frequencylist" @@ -73,6 +74,7 @@ type Model struct { frequencyCreationPopup *frequencycreation.Model frequencyUpdatePopup *frequencyupdate.Model banReasonPopup *banreason.Model + banViewPopup *banview.Model networkList networklist.Model frequencyList frequencylist.Model memberList memberlist.Model @@ -96,6 +98,7 @@ func New(privKey ed25519.PrivateKey, name string) Model { frequencyCreationPopup: nil, frequencyUpdatePopup: nil, banReasonPopup: nil, + banViewPopup: nil, networkList: networklist.New(), frequencyList: frequencylist.New(), memberList: memberlist.New(), @@ -145,7 +148,10 @@ func (m Model) View() string { popup = m.networkJoinPopup.View() } else if m.banReasonPopup != nil { popup = m.banReasonPopup.View() + } else if m.banViewPopup != nil { + popup = m.banViewPopup.View() } + if popup != "" { x := (ui.Width - lipgloss.Width(popup)) / 2 y := (ui.Height - lipgloss.Height(popup)) / 2 @@ -301,10 +307,14 @@ func (m *Model) updateConnected(msg tea.Msg) tea.Cmd { case *packet.TrustInfo: state.UpdateTrusteds(msg) - case ui.BanPopupMsg: + case ui.BanReasonPopupMsg: popup := banreason.New(msg.User, msg.Network) m.banReasonPopup = &popup + case ui.BanViewPopupmsg: + popup := banview.New(msg.User, msg.Network) + m.banViewPopup = &popup + case tea.KeyMsg: switch msg.String() { case "n": @@ -417,6 +427,7 @@ func (m *Model) updateConnected(msg tea.Msg) tea.Cmd { m.frequencyUpdatePopup = nil m.networkJoinPopup = nil m.banReasonPopup = nil + m.banViewPopup = nil } case "enter": @@ -464,6 +475,8 @@ func (m *Model) updateConnected(msg tea.Msg) tea.Cmd { m.banReasonPopup = nil } return cmd + } else if m.banViewPopup != nil { + m.banViewPopup = nil } default: @@ -581,6 +594,10 @@ func (m *Model) updatePopups(msg tea.Msg) tea.Cmd { popup, cmd := m.banReasonPopup.Update(msg) m.banReasonPopup = &popup return cmd + } else if m.banViewPopup != nil { + popup, cmd := m.banViewPopup.Update(msg) + m.banViewPopup = &popup + return cmd } return nil } @@ -593,5 +610,6 @@ func (m *Model) HasPopup() bool { m.frequencyCreationPopup != nil || m.frequencyUpdatePopup != nil || m.networkJoinPopup != nil || - m.banReasonPopup != nil + m.banReasonPopup != nil || + m.banViewPopup != nil } diff --git a/internal/client/ui/core/memberlist/memberlist.go b/internal/client/ui/core/memberlist/memberlist.go index 0e59ab0..f6b3845 100644 --- a/internal/client/ui/core/memberlist/memberlist.go +++ b/internal/client/ui/core/memberlist/memberlist.go @@ -279,6 +279,7 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { Network: *state.NetworkId(m.networkIndex), User: member.UserID, }) + case "U": networkId := state.NetworkId(m.networkIndex) network := state.State.Networks[*networkId] @@ -328,7 +329,7 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { } cmd := func() tea.Msg { - return ui.BanPopupMsg{ + return ui.BanReasonPopupMsg{ Network: *state.NetworkId(m.networkIndex), User: member.UserID, } |
