Fix chat rendering and improve input handling for UTF-8 support
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user