From ff032e5e0769cb33fa9075838b2cac3398e725f8 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Thu, 19 Dec 2024 17:03:18 +0200 Subject: Implemented client-side message sending --- internal/client/ui/core/chat/chat.go | 57 ++++++++++++++++++++-- internal/client/ui/core/core.go | 5 +- .../client/ui/core/frequencylist/frequencylist.go | 6 ++- 3 files changed, 63 insertions(+), 5 deletions(-) (limited to 'internal/client/ui/core') diff --git a/internal/client/ui/core/chat/chat.go b/internal/client/ui/core/chat/chat.go index 8600f46..c41c313 100644 --- a/internal/client/ui/core/chat/chat.go +++ b/internal/client/ui/core/chat/chat.go @@ -7,8 +7,12 @@ import ( tea "github.com/charmbracelet/bubbletea" "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/state" "github.com/kyren223/eko/internal/client/ui/viminput" + "github.com/kyren223/eko/internal/packet" + "github.com/kyren223/eko/pkg/snowflake" ) var ( @@ -28,6 +32,10 @@ type Model struct { vi viminput.Model focus bool locked bool + + networkIndex int // Note this might be invalid, rely on frequencyIndex + receiverIndex *int + frequencyIndex *int } func New() Model { @@ -126,12 +134,17 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { } if m.locked { - InNormal := m.vi.Mode() == viminput.NormalMode - if key, ok := msg.(tea.KeyMsg); ok && InNormal { - if key.String() == "q" { + if key, ok := msg.(tea.KeyMsg); ok { + InNormal := m.vi.Mode() == viminput.NormalMode + if key.String() == "q" && InNormal { m.locked = false return m, nil } + + if key.Type == tea.KeyEnter { + cmd := m.sendMessage() + return m, cmd + } } var cmd tea.Cmd @@ -165,3 +178,41 @@ func (m *Model) Blur() { func (m Model) Locked() bool { return m.locked } + +func (m *Model) sendMessage() tea.Cmd { + message := m.vi.String() + if len(message) > MaxCharCount { + return nil + } + if len(strings.TrimSpace(message)) == 0 { + return nil + } + + m.vi.Reset() + + var receiverId *snowflake.ID = nil + if m.receiverIndex != nil { + // TODO: do nothing for now, until trusted friends are implemented + } + + var frequencyId *snowflake.ID = nil + if m.frequencyIndex != nil { + network := state.State.Networks[m.networkIndex] + frequencyId = &network.Frequencies[*m.frequencyIndex].ID + } + + return gateway.Send(&packet.SendMessage{ + ReceiverID: receiverId, + FrequencyID: frequencyId, + Content: message, + }) +} + +func (m *Model) SetNetworkIndex(networkIndex int) { + m.networkIndex = networkIndex +} + +func (m *Model) Set(receiverIndex, frequencyIndex *int) { + m.receiverIndex = receiverIndex + m.frequencyIndex = frequencyIndex +} diff --git a/internal/client/ui/core/core.go b/internal/client/ui/core/core.go index 5d87294..5115274 100644 --- a/internal/client/ui/core/core.go +++ b/internal/client/ui/core/core.go @@ -288,9 +288,12 @@ func (m *Model) updateConnected(msg tea.Msg) tea.Cmd { switch m.focus { case FocusNetworkList: m.networkList, cmd = m.networkList.Update(msg) - m.frequencyList.Set(m.networkList.Index()) + m.frequencyList.SetNetworkIndex(m.networkList.Index()) + m.chat.SetNetworkIndex(m.networkList.Index()) case FocusFrequencyList: m.frequencyList, cmd = m.frequencyList.Update(msg) + index := m.frequencyList.Index() + m.chat.Set(nil, &index) case FocusChat: m.chat, cmd = m.chat.Update(msg) } diff --git a/internal/client/ui/core/frequencylist/frequencylist.go b/internal/client/ui/core/frequencylist/frequencylist.go index 3b7f800..c00b8cd 100644 --- a/internal/client/ui/core/frequencylist/frequencylist.go +++ b/internal/client/ui/core/frequencylist/frequencylist.go @@ -148,7 +148,7 @@ func (m Model) Swap(dir int) (Model, tea.Cmd) { return m, cmd } -func (m *Model) Set(index int) { +func (m *Model) SetNetworkIndex(index int) { m.networkIndex = index } @@ -162,3 +162,7 @@ func (m Model) Network() *packet.FullNetwork { } return &state.State.Networks[m.networkIndex] } + +func (m *Model) Index() int { + return m.index +} -- cgit v1.3.1