summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-01-12 17:57:54 +0200
committerKyren223 <Kyren223@proton.me>2025-01-12 17:57:54 +0200
commitbff19b516e69284b0a96087a094a9d811d630b85 (patch)
tree2aafe081e77c0dabe569ad09882fabd4eb52d3f3 /internal
parent1c09d173d733b491970841add0a20bf2ecf078cd (diff)
Fixed network positioning issues
Diffstat (limited to 'internal')
-rw-r--r--internal/client/gateway/gateway.go9
-rw-r--r--internal/client/ui/core/core.go7
-rw-r--r--internal/client/ui/core/networklist/networklist.go19
-rw-r--r--internal/client/ui/core/state/state.go9
-rw-r--r--internal/packet/types.go4
-rw-r--r--internal/server/api/api.go4
-rw-r--r--internal/server/server.go7
7 files changed, 40 insertions, 19 deletions
diff --git a/internal/client/gateway/gateway.go b/internal/client/gateway/gateway.go
index e272ca5..16a3176 100644
--- a/internal/client/gateway/gateway.go
+++ b/internal/client/gateway/gateway.go
@@ -237,6 +237,15 @@ func Send(request packet.Payload) tea.Cmd {
}
}
+func SendAsync(request packet.Payload) {
+ go func() {
+ err := send(request)
+ if err != nil {
+ log.Println("async request send error:", err)
+ }
+ }()
+}
+
func send(request packet.Payload) error {
pkt := packet.NewPacket(packet.NewMsgPackEncoder(request))
diff --git a/internal/client/ui/core/core.go b/internal/client/ui/core/core.go
index 4dc50e2..10088bf 100644
--- a/internal/client/ui/core/core.go
+++ b/internal/client/ui/core/core.go
@@ -132,7 +132,7 @@ func (m *Model) updateNotConnected(msg tea.Msg) tea.Cmd {
state.State.UserID = (*snowflake.ID)(&msg)
m.connected = true
m.timeout = initialTimeout
- return m.timer.Stop()
+ return tea.Batch(m.timer.Stop(), gateway.Send(&packet.GetUserData{}))
case gateway.ConnectionFailed:
log.Println("failed to connect:", msg)
@@ -175,7 +175,7 @@ func (m *Model) updateConnected(msg tea.Msg) tea.Cmd {
state.State.UserID = nil
m.connected = false
m.timeout = initialTimeout
- return tea.Batch(gateway.Connect(m.privKey, connectionTimeout), m.loading.Init())
+ return gateway.Connect(m.privKey, connectionTimeout)
case *packet.Error:
err := "new connection from another location, closing this one"
@@ -183,6 +183,9 @@ func (m *Model) updateConnected(msg tea.Msg) tea.Cmd {
return ui.Transition(ui.NewAuth())
}
+ case *packet.SetUserData:
+ state.FromJsonUserData(msg.Data)
+
case *packet.NetworksInfo:
state.UpdateNetworks(msg)
networkId := state.NetworkId(m.networkList.Index())
diff --git a/internal/client/ui/core/networklist/networklist.go b/internal/client/ui/core/networklist/networklist.go
index 00d5d12..5e3780f 100644
--- a/internal/client/ui/core/networklist/networklist.go
+++ b/internal/client/ui/core/networklist/networklist.go
@@ -16,10 +16,10 @@ var (
sepStyle = lipgloss.NewStyle().Width(0).
Border(lipgloss.ThickBorder(), false, true, false, false)
- selectedIndicator = "šŸ­€\nā–Œ\nšŸ­›"
- trustedUsersIcon = IconStyle("ī· ", colors.Turquoise, colors.DarkerCyan)
- trustedUsersButton = trustedUsersIcon.Margin(0, 1, 1).String()
- trustedUsersButtonSelected = lipgloss.JoinHorizontal(
+ selectedIndicator = "šŸ­€\nā–Œ\nšŸ­›"
+ trustedUsersIcon = IconStyle("ī· ", colors.Turquoise, colors.DarkerCyan)
+ peersButton = trustedUsersIcon.Margin(0, 1, 1).String()
+ peersButtonSelected = lipgloss.JoinHorizontal(
ui.Center,
selectedIndicator,
trustedUsersIcon.Margin(0, 1, 1, 0).String(),
@@ -69,18 +69,19 @@ func (m Model) View() string {
var builder strings.Builder
builder.WriteString("\n")
if m.index == PeersIndex {
- builder.WriteString(trustedUsersButtonSelected)
+ builder.WriteString(peersButtonSelected)
} else {
- builder.WriteString(trustedUsersButton)
+ builder.WriteString(peersButton)
}
builder.WriteString("\n")
- for i, network := range state.State.Networks {
+ for i, networkId := range state.Data.Networks {
+ network := state.State.Networks[networkId]
+
icon := IconStyle(network.Icon,
lipgloss.Color(network.FgHexColor),
lipgloss.Color(network.BgHexColor),
)
- networkId := state.NetworkId(m.index)
- if networkId != nil && *networkId == i {
+ if m.index == i {
builder.WriteString(lipgloss.JoinHorizontal(
ui.Center,
selectedIndicator,
diff --git a/internal/client/ui/core/state/state.go b/internal/client/ui/core/state/state.go
index b253d71..9b8c053 100644
--- a/internal/client/ui/core/state/state.go
+++ b/internal/client/ui/core/state/state.go
@@ -5,6 +5,7 @@ import (
"slices"
"github.com/google/btree"
+ "github.com/kyren223/eko/internal/client/gateway"
"github.com/kyren223/eko/internal/data"
"github.com/kyren223/eko/internal/packet"
"github.com/kyren223/eko/pkg/assert"
@@ -68,7 +69,7 @@ func UpdateNetworks(info *packet.NetworksInfo) {
}
for _, network := range info.Networks {
- if _, ok := networks[network.ID]; !ok {
+ if !slices.Contains(Data.Networks, network.ID) {
Data.Networks = append(Data.Networks, network.ID)
}
@@ -85,6 +86,10 @@ func UpdateNetworks(info *packet.NetworksInfo) {
State.Users[user.ID] = user
}
}
+
+ gateway.SendAsync(&packet.SetUserData{
+ Data: JsonUserData(),
+ })
}
func UpdateFrequencies(info *packet.FrequenciesInfo) {
@@ -182,7 +187,7 @@ func JsonUserData() string {
return string(bytes)
}
-func FromJsonUserDat(s string) {
+func FromJsonUserData(s string) {
var data UserData
err := json.Unmarshal([]byte(s), &data)
if err != nil {
diff --git a/internal/packet/types.go b/internal/packet/types.go
index 93de24a..c73902b 100644
--- a/internal/packet/types.go
+++ b/internal/packet/types.go
@@ -196,9 +196,7 @@ func (m *SetUserData) Type() PacketType {
return PacketSetUserData
}
-type GetUserData struct {
- Data string
-}
+type GetUserData struct{}
func (m *GetUserData) Type() PacketType {
return PacketGetUserData
diff --git a/internal/server/api/api.go b/internal/server/api/api.go
index 4dfa172..df29448 100644
--- a/internal/server/api/api.go
+++ b/internal/server/api/api.go
@@ -669,7 +669,7 @@ func SetUserData(ctx context.Context, sess *session.Session, request *packet.Set
return &ErrInternalError
}
- return &packet.GetUserData{
+ return &packet.SetUserData{
Data: request.Data,
}
}
@@ -683,7 +683,7 @@ func GetUserData(ctx context.Context, sess *session.Session, request *packet.Get
return &ErrInternalError
}
- return &packet.GetUserData{
+ return &packet.SetUserData{
Data: data,
}
}
diff --git a/internal/server/server.go b/internal/server/server.go
index 9abf51f..327eaa8 100644
--- a/internal/server/server.go
+++ b/internal/server/server.go
@@ -241,13 +241,18 @@ func (server *server) handleConnection(conn net.Conn) {
}()
// Send initial packets
- payload, err := api.GetNetworksInfo(ctx, sess)
+ payload := api.GetUserData(ctx, sess, &packet.GetUserData{})
+ dataPacket := packet.NewPacket(packet.NewMsgPackEncoder(payload))
+ sess.Write(ctx, dataPacket)
+
+ payload, err = api.GetNetworksInfo(ctx, sess)
if err != nil {
return // closes the connection
}
infoPacket := packet.NewPacket(packet.NewMsgPackEncoder(payload))
sess.Write(ctx, infoPacket)
+ // Infinite read loop
buffer := make([]byte, 512)
for {
n, err := conn.Read(buffer)