diff options
Diffstat (limited to 'internal/client/ui/core/core.go')
| -rw-r--r-- | internal/client/ui/core/core.go | 115 |
1 files changed, 66 insertions, 49 deletions
diff --git a/internal/client/ui/core/core.go b/internal/client/ui/core/core.go index 1f86121..737029f 100644 --- a/internal/client/ui/core/core.go +++ b/internal/client/ui/core/core.go @@ -12,8 +12,10 @@ import ( "github.com/kyren223/eko/internal/client/gateway" "github.com/kyren223/eko/internal/client/ui" "github.com/kyren223/eko/internal/client/ui/core/networkcreation" - "github.com/kyren223/eko/internal/client/ui/core/networks" + "github.com/kyren223/eko/internal/client/ui/core/networklist" + "github.com/kyren223/eko/internal/client/ui/core/state" "github.com/kyren223/eko/internal/client/ui/loadscreen" + "github.com/kyren223/eko/internal/packet" "github.com/kyren223/eko/pkg/snowflake" ) @@ -29,11 +31,11 @@ type Model struct { name string privKey ed25519.PrivateKey - networks networks.Model - loading loadscreen.Model - timer timer.Model - timeout time.Duration - connected bool + networkList networklist.Model + loading loadscreen.Model + timer timer.Model + timeout time.Duration + connected bool id snowflake.ID @@ -42,13 +44,13 @@ type Model struct { func New(privKey ed25519.PrivateKey, name string) Model { return Model{ - name: name, - privKey: privKey, - networks: networks.New(), - loading: loadscreen.New(connectingToServer), - timer: newTimer(initialTimeout), - timeout: initialTimeout, - connected: false, + name: name, + privKey: privKey, + networkList: networklist.New(), + loading: loadscreen.New(connectingToServer), + timer: newTimer(initialTimeout), + timeout: initialTimeout, + connected: false, } } @@ -61,7 +63,7 @@ func (m Model) View() string { return m.loading.View() } - result := m.networks.View() + result := m.networkList.View() result = lipgloss.Place( ui.Width, ui.Height, @@ -80,50 +82,65 @@ func (m Model) View() string { } func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { - if !m.connected { - switch msg := msg.(type) { - case gateway.ConnectionEstablished: - m.id = snowflake.ID(msg) - m.connected = true - m.timeout = initialTimeout - return m, m.timer.Stop() + if m.connected { + cmd := m.updateConnected(msg) + return m, cmd + } else { + cmd := m.updateNotConnected(msg) + return m, cmd + } +} - case gateway.ConnectionFailed: - m.timer = newTimer(m.timeout) - m.updateLoadScreenContent() - return m, m.timer.Start() +func (m *Model) updateNotConnected(msg tea.Msg) tea.Cmd { + switch msg := msg.(type) { + case gateway.ConnectionEstablished: + m.id = snowflake.ID(msg) + m.connected = true + m.timeout = initialTimeout + return m.timer.Stop() - case timer.TimeoutMsg: - m.timeout = min(m.timeout*2, time.Minute) - m.loading.SetContent(connectingToServer) - return m, gateway.Connect(m.privKey, connectionTimeout) + case gateway.ConnectionFailed: + m.timer = newTimer(m.timeout) + m.updateLoadScreenContent() + return m.timer.Start() - case timer.StartStopMsg: - var cmd tea.Cmd - m.timer, cmd = m.timer.Update(msg) - return m, cmd + case timer.TimeoutMsg: + m.timeout = min(m.timeout*2, time.Minute) + m.loading.SetContent(connectingToServer) + return gateway.Connect(m.privKey, connectionTimeout) - case timer.TickMsg: - m.updateLoadScreenContent() - var cmd tea.Cmd - m.timer, cmd = m.timer.Update(msg) - return m, cmd + case timer.StartStopMsg: + var cmd tea.Cmd + m.timer, cmd = m.timer.Update(msg) + return cmd - case spinner.TickMsg: - var loadscreenCmd tea.Cmd - m.loading, loadscreenCmd = m.loading.Update(msg) - return m, loadscreenCmd + case timer.TickMsg: + m.updateLoadScreenContent() + var cmd tea.Cmd + m.timer, cmd = m.timer.Update(msg) + return cmd - default: - return m, nil - } + case spinner.TickMsg: + var loadscreenCmd tea.Cmd + m.loading, loadscreenCmd = m.loading.Update(msg) + return loadscreenCmd + + default: + return nil } +} +func (m *Model) updateConnected(msg tea.Msg) tea.Cmd { switch msg := msg.(type) { case gateway.ConnectionLost: m.connected = false m.timeout = initialTimeout - return m, tea.Batch(gateway.Connect(m.privKey, connectionTimeout), m.loading.Init()) + return tea.Batch(gateway.Connect(m.privKey, connectionTimeout), m.loading.Init()) + + case *packet.NetworksInfo: + for _, network := range msg.Networks { + state.State.Networks[network.ID] = network + } case ui.QuitMsg: gateway.Disconnect() @@ -148,19 +165,19 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { if cmd != nil { m.networkCreationPopup = nil } - return m, cmd + return cmd } default: if m.networkCreationPopup != nil { popup, cmd := m.networkCreationPopup.Update(msg) m.networkCreationPopup = &popup - return m, cmd + return cmd } } } - return m, nil + return nil } func (m *Model) updateLoadScreenContent() { |
