summaryrefslogtreecommitdiff
path: root/internal/client/ui/core/chat/chat.go
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2024-12-19 17:03:18 +0200
committerKyren223 <Kyren223@proton.me>2024-12-19 17:03:18 +0200
commitff032e5e0769cb33fa9075838b2cac3398e725f8 (patch)
tree11c3b78c03539873474fb02aae59e3da49d35159 /internal/client/ui/core/chat/chat.go
parentf58c860d5549046f592790989df1c47bc9c2c1a1 (diff)
Implemented client-side message sending
Diffstat (limited to 'internal/client/ui/core/chat/chat.go')
-rw-r--r--internal/client/ui/core/chat/chat.go57
1 files changed, 54 insertions, 3 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
+}