Files
mpvipc/commands.go
2025-06-28 15:33:45 +02:00

73 lines
1.2 KiB
Go

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
}