summaryrefslogtreecommitdiff
path: root/internal/client/ui/core
diff options
context:
space:
mode:
Diffstat (limited to 'internal/client/ui/core')
-rw-r--r--internal/client/ui/core/chat/chat.go57
-rw-r--r--internal/client/ui/core/core.go5
-rw-r--r--internal/client/ui/core/frequencylist/frequencylist.go6
3 files changed, 63 insertions, 5 deletions
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
+}