mirror of
https://github.com/Xevion/go-ha.git
synced 2025-12-05 23:15:07 -06:00
235 lines
7.0 KiB
Go
235 lines
7.0 KiB
Go
package services
|
|
|
|
import (
|
|
"github.com/Xevion/go-ha/internal/connect"
|
|
)
|
|
|
|
type MediaPlayer struct {
|
|
conn *connect.HAConnection
|
|
}
|
|
|
|
// Send the media player the command to clear players playlist. Takes an entityId.
|
|
func (mp MediaPlayer) ClearPlaylist(entityId string) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "clear_playlist"
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Group players together. Only works on platforms with support for player groups. Takes an entityId and an optional map that is translated into service_data.
|
|
func (mp MediaPlayer) Join(entityId string, serviceData ...map[string]any) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "join"
|
|
if len(serviceData) != 0 {
|
|
req.ServiceData = serviceData[0]
|
|
}
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Send the media player the command for next track. Takes an entityId.
|
|
func (mp MediaPlayer) Next(entityId string) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "media_next_track"
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Send the media player the command for pause. Takes an entityId.
|
|
func (mp MediaPlayer) Pause(entityId string) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "media_pause"
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Send the media player the command for play. Takes an entityId.
|
|
func (mp MediaPlayer) Play(entityId string) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "media_play"
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Toggle media player play/pause state. Takes an entityId.
|
|
func (mp MediaPlayer) PlayPause(entityId string) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "media_play_pause"
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Send the media player the command for previous track. Takes an entityId.
|
|
func (mp MediaPlayer) Previous(entityId string) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "media_previous_track"
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Send the media player the command to seek in current playing media. Takes an entityId and an optional map that is translated into service_data.
|
|
func (mp MediaPlayer) Seek(entityId string, serviceData ...map[string]any) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "media_seek"
|
|
if len(serviceData) != 0 {
|
|
req.ServiceData = serviceData[0]
|
|
}
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Send the media player the stop command. Takes an entityId.
|
|
func (mp MediaPlayer) Stop(entityId string) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "media_stop"
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Send the media player the command to play a media. Takes an entityId and an optional map that is translated into service_data.
|
|
func (mp MediaPlayer) PlayMedia(entityId string, serviceData ...map[string]any) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "play_media"
|
|
if len(serviceData) != 0 {
|
|
req.ServiceData = serviceData[0]
|
|
}
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Set repeat mode. Takes an entityId and an optional map that is translated into service_data.
|
|
func (mp MediaPlayer) RepeatSet(entityId string, serviceData ...map[string]any) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "repeat_set"
|
|
if len(serviceData) != 0 {
|
|
req.ServiceData = serviceData[0]
|
|
}
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Select a sound mode. Takes an entityId and an optional map that is translated into service_data.
|
|
func (mp MediaPlayer) SelectSoundMode(entityId string, serviceData ...map[string]any) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "select_sound_mode"
|
|
if len(serviceData) != 0 {
|
|
req.ServiceData = serviceData[0]
|
|
}
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Select a source. Takes an entityId and an optional map that is translated into service_data.
|
|
func (mp MediaPlayer) SelectSource(entityId string, serviceData ...map[string]any) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "select_source"
|
|
if len(serviceData) != 0 {
|
|
req.ServiceData = serviceData[0]
|
|
}
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Toggle shuffle state. Takes an entityId and an optional map that is translated into service_data.
|
|
func (mp MediaPlayer) Shuffle(entityId string, serviceData ...map[string]any) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "shuffle_set"
|
|
if len(serviceData) != 0 {
|
|
req.ServiceData = serviceData[0]
|
|
}
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Toggle a media player on/off. Takes an entityId.
|
|
func (mp MediaPlayer) Toggle(entityId string) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "toggle"
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Turn off a media player. Takes an entityId.
|
|
func (mp MediaPlayer) TurnOff(entityId string) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "turn_off"
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Turn on a media player. Takes an entityId.
|
|
func (mp MediaPlayer) TurnOn(entityId string) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "turn_on"
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Separate a player from a group. Only works on platforms with support for player groups. Takes an entityId.
|
|
func (mp MediaPlayer) Unjoin(entityId string) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "unjoin"
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Send the media player the command for volume down. Takes an entityId.
|
|
func (mp MediaPlayer) VolumeDown(entityId string) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "volume_down"
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Mute a media player. Takes an entityId and an optional map that is translated into service_data.
|
|
func (mp MediaPlayer) VolumeMute(entityId string, serviceData ...map[string]any) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "volume_mute"
|
|
if len(serviceData) != 0 {
|
|
req.ServiceData = serviceData[0]
|
|
}
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Set volume level. Takes an entityId and an optional map that is translated into service_data.
|
|
func (mp MediaPlayer) VolumeSet(entityId string, serviceData ...map[string]any) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "volume_set"
|
|
if len(serviceData) != 0 {
|
|
req.ServiceData = serviceData[0]
|
|
}
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|
|
|
|
// Send the media player the command for volume up. Takes an entityId.
|
|
func (mp MediaPlayer) VolumeUp(entityId string) error {
|
|
req := NewBaseServiceRequest(entityId)
|
|
req.Domain = "media_player"
|
|
req.Service = "volume_up"
|
|
|
|
return mp.conn.WriteMessage(req)
|
|
}
|