diff --git a/cmd/soundtouch-cli/cmd_events.go b/cmd/soundtouch-cli/cmd_events.go index 1eb83a8..f1eeba4 100644 --- a/cmd/soundtouch-cli/cmd_events.go +++ b/cmd/soundtouch-cli/cmd_events.go @@ -389,6 +389,10 @@ func handleSpecialMessage(message *models.SpecialMessage, filters map[string]boo if !filters["userActivity"] { return } + case models.MessageTypeUserInactivity: + if !filters["userInactivity"] { + return + } } } @@ -402,6 +406,12 @@ func handleSpecialMessage(message *models.SpecialMessage, filters map[string]boo case models.MessageTypeUserActivity: fmt.Printf("\n👤 User Activity [%s]\n", message.DeviceID) + if verbose { + fmt.Printf(" ⏰ Timestamp: %s\n", message.Timestamp.Format("15:04:05")) + } + case models.MessageTypeUserInactivity: + fmt.Printf("\n💤 User Inactivity [%s]\n", message.DeviceID) + if verbose { fmt.Printf(" ⏰ Timestamp: %s\n", message.Timestamp.Format("15:04:05")) } diff --git a/pkg/models/websocket.go b/pkg/models/websocket.go index 49d9443..cae8dc0 100644 --- a/pkg/models/websocket.go +++ b/pkg/models/websocket.go @@ -304,8 +304,9 @@ type SpecialMessageType string // Constants for special message types const ( - MessageTypeSdkInfo SpecialMessageType = "sdkInfo" - MessageTypeUserActivity SpecialMessageType = "userActivity" + MessageTypeSdkInfo SpecialMessageType = "sdkInfo" + MessageTypeUserActivity SpecialMessageType = "userActivity" + MessageTypeUserInactivity SpecialMessageType = "userInactivity" ) // SoundTouchSdkInfo represents the SDK info message sent on connection @@ -321,6 +322,12 @@ type UserActivityUpdate struct { DeviceID string `xml:"deviceID,attr"` } +// UserInactivityUpdate represents user inactivity notifications +type UserInactivityUpdate struct { + XMLName xml.Name `xml:"userInactivityUpdate"` + DeviceID string `xml:"deviceID,attr"` +} + // SpecialMessage represents non-updates WebSocket messages type SpecialMessage struct { Type SpecialMessageType @@ -604,6 +611,22 @@ func ParseSpecialMessage(data []byte) (*SpecialMessage, error) { }, nil } + // Check for userInactivityUpdate + if strings.Contains(dataStr, "