diff options
| author | Kyren223 <Kyren223@proton.me> | 2025-07-21 13:46:40 +0300 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2025-07-21 13:46:40 +0300 |
| commit | 5f6845c3997bd5478a1f51a8f108b71afa427a72 (patch) | |
| tree | 1a713c28657f15715f337286cc770e93d2739fd6 /internal/client/ui | |
| parent | 3fcaf100334897e314a86a53576639410055989b (diff) | |
Added the ability to delete users
Diffstat (limited to 'internal/client/ui')
| -rw-r--r-- | internal/client/ui/core/core.go | 2 | ||||
| -rw-r--r-- | internal/client/ui/core/state/state.go | 25 | ||||
| -rw-r--r-- | internal/client/ui/core/usersettings/usersettings.go | 42 |
3 files changed, 67 insertions, 2 deletions
diff --git a/internal/client/ui/core/core.go b/internal/client/ui/core/core.go index 8c0a336..7e42619 100644 --- a/internal/client/ui/core/core.go +++ b/internal/client/ui/core/core.go @@ -388,6 +388,7 @@ func (m *Model) updateConnected(message tea.Msg) tea.Cmd { } else { log.Println("received error:", msg.Error) gateway.Disconnect() + state.Reset() return ui.Transition(ui.NewAuth()) } } @@ -490,6 +491,7 @@ func (m *Model) updateAuthenticated(message tea.Msg) tea.Cmd { err := "new connection from another location, closing this one" if err == msg.Error { gateway.Disconnect() + state.Reset() return ui.Transition(ui.NewAuth()) } diff --git a/internal/client/ui/core/state/state.go b/internal/client/ui/core/state/state.go index 16b92a9..97a6de8 100644 --- a/internal/client/ui/core/state/state.go +++ b/internal/client/ui/core/state/state.go @@ -84,6 +84,29 @@ var Data UserData = UserData{ var UserID *snowflake.ID = nil +func Reset() { + UserID = nil + Data = UserData{ + Networks: []snowflake.ID{}, + Signals: []snowflake.ID{}, + } + State = state{ + ChatState: map[snowflake.ID]ChatState{}, + LastFrequency: map[snowflake.ID]snowflake.ID{}, + Messages: map[snowflake.ID]*btree.BTreeG[data.Message]{}, + Networks: map[snowflake.ID]data.Network{}, + Frequencies: map[snowflake.ID][]data.Frequency{}, + Members: map[snowflake.ID]map[snowflake.ID]data.Member{}, + Users: map[snowflake.ID]data.User{}, + TrustedUsers: map[snowflake.ID]ed25519.PublicKey{}, + BlockedUsers: map[snowflake.ID]struct{}{}, + BlockingUsers: map[snowflake.ID]struct{}{}, + LastReadMessages: map[snowflake.ID]*snowflake.ID{}, + RemoteNotifications: map[snowflake.ID]int{}, + LocalNotifications: map[snowflake.ID]int{}, + } +} + func UpdateNetworks(info *packet.NetworksInfo) { networks := State.Networks @@ -382,7 +405,7 @@ func SendFinalData() { // HACK: Give a small grace period for the writes to be processed // Tweak this value as needed - time.Sleep(20 * time.Millisecond) + // time.Sleep(20 * time.Millisecond) // TODO: // I think the issue is that it's random which of these 2 requests goes diff --git a/internal/client/ui/core/usersettings/usersettings.go b/internal/client/ui/core/usersettings/usersettings.go index c833b5c..f7664fc 100644 --- a/internal/client/ui/core/usersettings/usersettings.go +++ b/internal/client/ui/core/usersettings/usersettings.go @@ -18,12 +18,14 @@ package usersettings import ( "errors" + "log" "strings" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" "github.com/kyren223/eko/internal/client/config" "github.com/kyren223/eko/internal/client/gateway" + "github.com/kyren223/eko/internal/client/ui" "github.com/kyren223/eko/internal/client/ui/colors" "github.com/kyren223/eko/internal/client/ui/core/state" "github.com/kyren223/eko/internal/client/ui/field" @@ -46,6 +48,17 @@ var ( Render("Update User Settings") } + blurredDelete = func() string { + return lipgloss.NewStyle().Padding(0, 1). + Background(colors.DarkGray).Foreground(colors.Red). + Render("Delete User Permanently") + } + focusedDelete = func() string { + return lipgloss.NewStyle().Padding(0, 1). + Background(colors.Red).Foreground(colors.Black). + Render("Delete User Permanently") + } + highlightedStyle = func() lipgloss.Style { return lipgloss.NewStyle().Padding(0, 0). Background(colors.BackgroundHighlight).Foreground(colors.White) @@ -57,6 +70,7 @@ const ( Description PrivateField UpdateField + DeleteField FieldCount ) @@ -65,6 +79,7 @@ type Model struct { description field.Model privateDM bool update string + delete string selected int nameWidth int @@ -126,6 +141,7 @@ func New() Model { description: description, privateDM: !user.IsPublicDM, update: blurredUpdate(), + delete: blurredDelete(), selected: 0, nameWidth: nameWidth, } @@ -158,6 +174,12 @@ func (m Model) View() string { Align(lipgloss.Center). Render(m.update) + del := lipgloss.NewStyle(). + Width(m.nameWidth). + Background(colors.Background). + Align(lipgloss.Center). + Render(m.delete) + configFile := "Config File: " + highlightedStyle().Render(config.ConfigFile) configFile = lipgloss.NewStyle(). Background(colors.Background).Foreground(colors.White). @@ -172,7 +194,7 @@ func (m Model) View() string { Render(analyticsOptOut) content := flex.NewVertical( - analyticsOptOut, configFile, name, description, private, update, + analyticsOptOut, configFile, name, description, private, update, del, ).WithGap(1).View() return lipgloss.NewStyle(). @@ -225,6 +247,7 @@ func (m *Model) updateFocus() tea.Cmd { m.name.Blur() m.description.Blur() m.update = blurredUpdate() + m.delete = blurredDelete() switch m.selected { case NameField: return m.name.Focus() @@ -235,6 +258,9 @@ func (m *Model) updateFocus() tea.Cmd { case UpdateField: m.update = focusedUpdate() return nil + case DeleteField: + m.delete = focusedDelete() + return nil default: assert.Never("missing switch statement field in update focus", "selected", m.selected) return nil @@ -247,6 +273,20 @@ func (m *Model) Select() tea.Cmd { return nil } + if m.selected == DeleteField { + log.Println("DELETING CLIENT") + // PERMA DELETE USER and return to login screen + state.Reset() + return tea.Batch(func() tea.Msg { + msg := gateway.Send(&packet.SetUserData{ + Data: nil, + User: &data.User{IsDeleted: true}, + })() // Important, call this function to block + gateway.Disconnect() + return msg + }, ui.Transition(ui.NewAuth())) + } + if m.selected != UpdateField { return nil } |
