Implement Poke functionality, refine talking status and add local log events

This commit is contained in:
Jose Luis Montañes Ojados
2026-01-17 00:53:50 +01:00
parent be5e26486c
commit 3a57f41fc2
5 changed files with 125 additions and 20 deletions

View File

@@ -183,6 +183,16 @@ type clientLeftMsg struct {
clientID uint16
}
type clientMovedMsg struct {
clientID uint16
channelID uint64
}
type pokeMsg struct {
senderName string
message string
}
type chatMsg struct {
senderID uint16
senderName string
@@ -240,6 +250,20 @@ func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.audioPlayer.PlayPCM(e.SenderID, e.PCM)
}
})
m.client.On(ts3client.EventClientMoved, func(e *ts3client.ClientMovedEvent) {
m.program.Send(clientMovedMsg{
clientID: e.ClientID,
channelID: e.ChannelID,
})
})
m.client.On(ts3client.EventPoke, func(e *ts3client.PokeEvent) {
m.program.Send(pokeMsg{
senderName: e.SenderName,
message: e.Message,
})
})
}
// Initialize audio player
@@ -349,6 +373,29 @@ func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
return m, nil
case clientMovedMsg:
if msg.clientID == m.selfID {
chName := "Unknown"
if ch := m.client.GetChannel(msg.channelID); ch != nil {
chName = ch.Name
}
m.chatMessages = append(m.chatMessages, ChatMessage{
Time: time.Now(),
Sender: "SYSTEM",
Content: fmt.Sprintf("You moved to channel: %s", chName),
})
}
return m, nil
case pokeMsg:
m.chatMessages = append(m.chatMessages, ChatMessage{
Time: time.Now(),
Sender: "POKE",
Content: fmt.Sprintf("[%s]: %s", msg.senderName, msg.message),
})
m.addLog("Received poke from %s: %s", msg.senderName, msg.message)
return m, nil
case chatMsg:
m.chatMessages = append(m.chatMessages, ChatMessage{
Time: time.Now(),
@@ -569,7 +616,7 @@ func (m *Model) handleKeyPress(msg tea.KeyMsg) (tea.Model, tea.Cmd) {
return m, nil
}
func (m *Model) handleChatKeys(msg tea.KeyMsg) (tea.Model, tea.Cmd) {
func (m *Model) handleChatKeys(_ tea.KeyMsg) (tea.Model, tea.Cmd) {
return m, nil
}