summaryrefslogtreecommitdiff
path: root/internal/client/ui/core/core.go
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2024-11-27 22:04:55 +0200
committerKyren223 <Kyren223@proton.me>2024-11-27 22:04:55 +0200
commit4a0d94e4893cd77a0bb498b355d3e1b3cbeed2df (patch)
tree9469dce6b4ed8a4db77771f70ada6fcaf23475c3 /internal/client/ui/core/core.go
parent11e523bb89b7ac5a516a176b487d6730a7b781bb (diff)
Worked on the UI for the network list
Diffstat (limited to 'internal/client/ui/core/core.go')
-rw-r--r--internal/client/ui/core/core.go115
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() {