diff options
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/client/gateway/gateway.go | 9 | ||||
| -rw-r--r-- | internal/client/ui/core/core.go | 7 | ||||
| -rw-r--r-- | internal/client/ui/core/networklist/networklist.go | 19 | ||||
| -rw-r--r-- | internal/client/ui/core/state/state.go | 9 | ||||
| -rw-r--r-- | internal/packet/types.go | 4 | ||||
| -rw-r--r-- | internal/server/api/api.go | 4 | ||||
| -rw-r--r-- | internal/server/server.go | 7 |
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) |
