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
|
// Handle incoming audio - play through speakers
|
||||||
m.client.On(ts3client.EventAudio, func(e *ts3client.AudioEvent) {
|
m.client.On(ts3client.EventAudio, func(e *ts3client.AudioEvent) {
|
||||||
if m.audioPlayer != nil {
|
if m.audioPlayer != nil {
|
||||||
@@ -325,6 +333,18 @@ func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
}
|
}
|
||||||
return m, nil
|
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:
|
case micLevelMsg:
|
||||||
// Update microphone level for display
|
// Update microphone level for display
|
||||||
m.micLevel = int(msg)
|
m.micLevel = int(msg)
|
||||||
@@ -510,12 +530,23 @@ func (m *Model) handleInputKeys(msg tea.KeyMsg) (tea.Model, tea.Cmd) {
|
|||||||
m.inputText = ""
|
m.inputText = ""
|
||||||
case "backspace":
|
case "backspace":
|
||||||
if len(m.inputText) > 0 {
|
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:
|
default:
|
||||||
// Add character to input
|
// Add character to input
|
||||||
if len(msg.String()) == 1 {
|
// Allow Runes (including multi-byte like ñ) and Space
|
||||||
m.inputText += msg.String()
|
// 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
|
return m, nil
|
||||||
|
|||||||
Reference in New Issue
Block a user