summaryrefslogtreecommitdiff
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
parent11e523bb89b7ac5a516a176b487d6730a7b781bb (diff)
Worked on the UI for the network list
-rw-r--r--internal/client/ui/colors/colors.go4
-rw-r--r--internal/client/ui/core/core.go115
-rw-r--r--internal/client/ui/core/networkcreation/networkcreation.go4
-rw-r--r--internal/client/ui/core/networklist/networklist.go (renamed from internal/client/ui/core/networks/networks.go)58
-rw-r--r--internal/client/ui/core/state/state.go14
5 files changed, 99 insertions, 96 deletions
diff --git a/internal/client/ui/colors/colors.go b/internal/client/ui/colors/colors.go
index 67d91fc..bd4e708 100644
--- a/internal/client/ui/colors/colors.go
+++ b/internal/client/ui/colors/colors.go
@@ -11,11 +11,15 @@ var (
LightBlue = lipgloss.Color("#5874FF")
Blue = lipgloss.Color("#0029f5")
DarkCyan = lipgloss.Color("#007E8A")
+ DarkerCyan = lipgloss.Color("#005d66")
DarkMidnightBlue = lipgloss.Color("#1E1E2E")
Turquoise = lipgloss.Color("#54D7A9")
Red = lipgloss.Color("#F16265")
White = lipgloss.Color("#FFFFFF")
Black = lipgloss.Color("#000000")
+ Green = lipgloss.Color("#46d46c")
+ Purple = lipgloss.Color("#BB91F0")
+ DarkPurple = lipgloss.Color("#87123d")
Background = DarkMidnightBlue
Error = Red
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() {
diff --git a/internal/client/ui/core/networkcreation/networkcreation.go b/internal/client/ui/core/networkcreation/networkcreation.go
index b7f76d4..4575143 100644
--- a/internal/client/ui/core/networkcreation/networkcreation.go
+++ b/internal/client/ui/core/networkcreation/networkcreation.go
@@ -9,7 +9,7 @@ import (
"github.com/charmbracelet/lipgloss"
"github.com/kyren223/eko/internal/client/gateway"
"github.com/kyren223/eko/internal/client/ui/colors"
- "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/field"
"github.com/kyren223/eko/internal/client/ui/layouts/flex"
"github.com/kyren223/eko/internal/packet"
@@ -156,7 +156,7 @@ func (m Model) Init() tea.Cmd {
func (m Model) View() string {
name := m.name.View()
- iconPreview := networks.IconStyle(m.lastFg, m.lastBg).Render(m.icon.Value())
+ iconPreview := networklist.IconStyle(m.lastFg, m.lastBg).Render(m.icon.Value())
iconPreview = lipgloss.NewStyle().Width(m.nameWidth).Align(lipgloss.Center).Render(iconPreview)
color := colors.Gray
diff --git a/internal/client/ui/core/networks/networks.go b/internal/client/ui/core/networklist/networklist.go
index 5de9f38..7b191e8 100644
--- a/internal/client/ui/core/networks/networks.go
+++ b/internal/client/ui/core/networklist/networklist.go
@@ -1,4 +1,4 @@
-package networks
+package networklist
import (
"strings"
@@ -6,7 +6,8 @@ import (
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
"github.com/kyren223/eko/internal/client/ui"
- "github.com/kyren223/eko/internal/data"
+ "github.com/kyren223/eko/internal/client/ui/colors"
+ "github.com/kyren223/eko/internal/client/ui/core/state"
)
var (
@@ -14,53 +15,18 @@ var (
partialIconStyle = lipgloss.NewStyle().Width(6).Height(3).PaddingTop(1).Margin(0, 1).
Align(lipgloss.Center).
Border(lipgloss.ThickBorder(), false, false)
- networks = []string{
- "󰜈 ",
- " ",
- "Kr",
- " ",
- // "Test",
- // "██████\n██████\n██████",
- // " ▄▄▄▄ \n █ █ \n ▀▀▀▀ ",
- // " \n 󰜈 \n ",
- // "Hmm",
- // "Another",
- }
-
- reverse = lipgloss.NewStyle().Foreground(lipgloss.Color("#20999D"))
- // Render("")
-
- label1 = lipgloss.NewStyle().
- Background(lipgloss.Color("#20999D")).Foreground(lipgloss.Color("#000000")).
- Padding(0, 1).
- Bold(true).
- Render("󰜈")
- label2 = reverse.Render("") + label1 + reverse.Render("")
- label3 = ""
- label4 = lipgloss.NewStyle().
- Foreground(lipgloss.Color("#20999D")).
- Bold(true).
- Render("󰜈")
-
- name = lipgloss.NewStyle().
- Bold(true).
- Render("Kyren223")
- user = lipgloss.JoinHorizontal(lipgloss.Center, label4, " ", name)
+ trustedUsersButton = IconStyle(lipgloss.Color(colors.Turquoise), lipgloss.Color(colors.DarkerCyan)).
+ MarginBottom(1).Render(" ")
)
func IconStyle(fg, bg lipgloss.Color) lipgloss.Style {
return partialIconStyle.Foreground(fg).Background(bg)
}
-type Model struct {
- networks []string
- a data.Network
-}
+type Model struct{}
func New() Model {
- return Model{
- networks: networks,
- }
+ return Model{}
}
func (m Model) Init() tea.Cmd {
@@ -74,9 +40,11 @@ func (m Model) View() string {
// top := strings.Repeat(border.Top, 6)
// builder.WriteString(fmt.Sprintf("%s%s%s\n", border.TopLeft, top, border.TopRight))
builder.WriteString("\n")
- for _, network := range m.networks {
- builder.WriteString(IconStyle(lipgloss.Color("#ffbf00"), lipgloss.Color("#4a3d5c")).
- MarginBottom(1).Render(network))
+ builder.WriteString(trustedUsersButton)
+ builder.WriteString("\n")
+ for _, network := range state.State.Networks {
+ builder.WriteString(IconStyle(lipgloss.Color(network.FgHexColor), lipgloss.Color(network.BgHexColor)).
+ MarginBottom(1).Render(network.Icon))
builder.WriteString("\n")
}
// bottom := strings.Repeat(border.Bottom, 6)
@@ -87,7 +55,7 @@ func (m Model) View() string {
sep := lipgloss.NewStyle().Border(lipgloss.ThickBorder(), false, true, false, false).Height(ui.Height).Width(0)
result = lipgloss.JoinHorizontal(lipgloss.Top, result, sep.Render(""))
- return result + user
+ return result
}
func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
diff --git a/internal/client/ui/core/state/state.go b/internal/client/ui/core/state/state.go
new file mode 100644
index 0000000..eeba245
--- /dev/null
+++ b/internal/client/ui/core/state/state.go
@@ -0,0 +1,14 @@
+package state
+
+import (
+ "github.com/kyren223/eko/internal/packet"
+ "github.com/kyren223/eko/pkg/snowflake"
+)
+
+type state struct {
+ Networks map[snowflake.ID]packet.FullNetwork
+}
+
+var State state = state{
+ Networks: make(map[snowflake.ID]packet.FullNetwork),
+}