Fix chat rendering and improve input handling for UTF-8 support

This commit is contained in:
Jose Luis Montañes Ojados
2026-01-16 22:41:26 +01:00
parent 9675f3764c
commit d50a1d3a74

View File

@@ -210,6 +210,14 @@ func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
})
})
m.client.On(ts3client.EventMessage, func(e *ts3client.MessageEvent) {
m.program.Send(chatMsg{
senderID: e.SenderID,
senderName: e.SenderName,
message: e.Message,
})
})
// Handle incoming audio - play through speakers
m.client.On(ts3client.EventAudio, func(e *ts3client.AudioEvent) {
if m.audioPlayer != nil {
@@ -325,6 +333,18 @@ func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
return m, nil
case chatMsg:
m.chatMessages = append(m.chatMessages, ChatMessage{
Time: time.Now(),
Sender: msg.senderName,
Content: msg.message,
})
// Keep last 100 messages
if len(m.chatMessages) > 100 {
m.chatMessages = m.chatMessages[1:]
}
return m, nil
case micLevelMsg:
// Update microphone level for display
m.micLevel = int(msg)
@@ -510,12 +530,23 @@ func (m *Model) handleInputKeys(msg tea.KeyMsg) (tea.Model, tea.Cmd) {
m.inputText = ""
case "backspace":
if len(m.inputText) > 0 {
m.inputText = m.inputText[:len(m.inputText)-1]
// Handle UTF-8 backspace properly
runes := []rune(m.inputText)
if len(runes) > 0 {
m.inputText = string(runes[:len(runes)-1])
}
}
default:
// Add character to input
if len(msg.String()) == 1 {
m.inputText += msg.String()
// Allow Runes (including multi-byte like ñ) and Space
// Filter out special keys that might send description strings (like "alt+") by ensuring only 1 rune
if msg.Type == tea.KeyRunes {
runes := []rune(msg.String())
if len(runes) == 1 {
m.inputText += string(runes)
}
} else if msg.Type == tea.KeySpace {
m.inputText += " "
}
}
return m, nil