summaryrefslogtreecommitdiff
path: root/internal/client/ui/core
diff options
context:
space:
mode:
Diffstat (limited to 'internal/client/ui/core')
-rw-r--r--internal/client/ui/core/banlist/banlist.go39
-rw-r--r--internal/client/ui/core/banview/banview.go64
-rw-r--r--internal/client/ui/core/core.go22
-rw-r--r--internal/client/ui/core/memberlist/memberlist.go3
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,
}