summaryrefslogtreecommitdiff
path: root/internal/client
diff options
context:
space:
mode:
Diffstat (limited to 'internal/client')
-rw-r--r--internal/client/gateway/gateway.go4
-rw-r--r--internal/client/ui/core/core.go2
-rw-r--r--internal/client/ui/core/state/state.go25
-rw-r--r--internal/client/ui/core/usersettings/usersettings.go42
4 files changed, 69 insertions, 4 deletions
diff --git a/internal/client/gateway/gateway.go b/internal/client/gateway/gateway.go
index f543d82..68c26b2 100644
--- a/internal/client/gateway/gateway.go
+++ b/internal/client/gateway/gateway.go
@@ -148,7 +148,7 @@ func handlePacketStream() {
payload, err := pkt.DecodedPayload()
assert.NoError(err, "server should always provide a decodeable packet")
- log.Printf("received streamed packet %v: %v\n", payload.Type(), payload)
+ // log.Printf("received streamed packet %v: %v\n", payload.Type(), payload)
ui.Program.Send(payload)
}
}
@@ -189,7 +189,7 @@ func Send(request packet.Payload) tea.Cmd {
if err != nil {
log.Println("request send error:", err)
} else {
- log.Println("request sent successfully:", request)
+ // log.Println("request sent successfully:", request)
}
return RequestSentMsg{
request: request,
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
}