package mpvipc import ( "context" "time" ) type LoadFileFlag string const ( LoadFileReplace LoadFileFlag = "replace" LoadFileAppend LoadFileFlag = "append" LoadFileAppendPlay LoadFileFlag = "append-play" ) func LoadFile(socket string, file string, flags LoadFileFlag) error { if flags == "" { flags = LoadFileReplace } cmd := &Command{[]interface{}{"loadfile", file, flags}} _, err := SendCommand[any](socket, cmd) return err } func ShufflePlaylist(socket string) error { cmd := &Command{Command: []interface{}{"playlist-shuffle"}} _, err := SendCommand[any](socket, cmd) return err } func Quit(socket string) error { cmd := &Command{Command: []interface{}{"quit"}} _, err := SendCommand[any](socket, cmd) return err } func Ping(socket string) bool { _, err := GetPID(socket) return err == nil } func IsReady(ctx context.Context, socket string) <-chan bool { out := make(chan bool, 1) go func() { defer close(out) if Ping(socket) { out <- true return } ticker := time.NewTicker(100 * time.Millisecond) defer ticker.Stop() for { select { case <-ticker.C: if Ping(socket) { out <- true return } case <-ctx.Done(): out <- false return } } }() return out }