summaryrefslogtreecommitdiff
path: root/internal/client/ui/core/core.go
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-01-04 18:35:44 +0200
committerKyren223 <Kyren223@proton.me>2025-01-04 18:35:44 +0200
commit614cc4d9dabc0e058ee149fbc2fcff866ae62a41 (patch)
tree4f2c674520dc3105ea3c9c549704cca7e1db294d /internal/client/ui/core/core.go
parentfeb8562dd0b6a0ec35781e80756dc3761e6b1ade (diff)
Implemented joining functionality
Diffstat (limited to 'internal/client/ui/core/core.go')
-rw-r--r--internal/client/ui/core/core.go24
1 files changed, 20 insertions, 4 deletions
diff --git a/internal/client/ui/core/core.go b/internal/client/ui/core/core.go
index 3048375..ef31c27 100644
--- a/internal/client/ui/core/core.go
+++ b/internal/client/ui/core/core.go
@@ -46,7 +46,6 @@ const (
type Model struct {
name string
privKey ed25519.PrivateKey
- id snowflake.ID
loading loadscreen.Model
timer timer.Model
@@ -66,7 +65,6 @@ func New(privKey ed25519.PrivateKey, name string) Model {
m := Model{
name: name,
privKey: privKey,
- id: 0,
loading: loadscreen.New(connectingToServer),
timer: newTimer(initialTimeout),
timeout: initialTimeout,
@@ -134,7 +132,7 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
func (m *Model) updateNotConnected(msg tea.Msg) tea.Cmd {
switch msg := msg.(type) {
case gateway.ConnectionEstablished:
- m.id = snowflake.ID(msg)
+ state.State.UserID = (*snowflake.ID)(&msg)
m.connected = true
m.timeout = initialTimeout
return m.timer.Stop()
@@ -176,6 +174,7 @@ func (m *Model) updateConnected(msg tea.Msg) tea.Cmd {
gateway.Disconnect()
case gateway.ConnectionLost:
+ state.State.UserID = nil
m.connected = false
m.timeout = initialTimeout
return tea.Batch(gateway.Connect(m.privKey, connectionTimeout), m.loading.Init())
@@ -185,7 +184,24 @@ func (m *Model) updateConnected(msg tea.Msg) tea.Cmd {
state.State.Networks = msg.Networks
} else {
networks := state.State.Networks
- networks = append(networks, msg.Networks...)
+
+ for _, newNetwork := range msg.Networks {
+ add := true
+ for i, existingNetwork := range networks {
+ if existingNetwork.ID == newNetwork.ID {
+ add = false
+ if newNetwork.Position == -1 {
+ newNetwork.Position = existingNetwork.Position
+ }
+ networks[i] = newNetwork
+ break
+ }
+ }
+ if add {
+ networks = append(networks, newNetwork)
+ }
+ }
+
networks = slices.DeleteFunc(networks, func(network packet.FullNetwork) bool {
return slices.Contains(msg.RemoveNetworks, network.ID)
})