9 Commits

Author SHA1 Message Date
e425b08ef8 added ShufflePlaylist 2025-06-28 15:33:45 +02:00
f413f97824 added GetPlaylistPosition 2025-06-28 14:18:56 +02:00
5eb15eb7a5 GetPause implemented 2025-06-28 14:14:55 +02:00
3e68bbda29 added SetPlaylistPosition 2025-06-28 13:47:16 +02:00
bca0e0bf3a added GetPlaylist() 2025-06-28 13:36:09 +02:00
4fef37ceca introduced Ping() function 2025-06-28 13:17:11 +02:00
0e44626c13 check instantly if mpv is ready 2025-06-28 13:10:43 +02:00
195b00abf2 fixed dependencies 2025-06-25 23:23:31 +02:00
cb478e8b4d Update go.mod 2024-12-16 19:47:28 +01:00
8 changed files with 50 additions and 11 deletions

View File

@ -2,7 +2,6 @@ package mpvipc
import ( import (
"context" "context"
"net"
"time" "time"
) )
@ -24,27 +23,41 @@ func LoadFile(socket string, file string, flags LoadFileFlag) error {
return err 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 { func Quit(socket string) error {
cmd := &Command{Command: []interface{}{"quit"}} cmd := &Command{Command: []interface{}{"quit"}}
_, err := SendCommand[any](socket, cmd) _, err := SendCommand[any](socket, cmd)
return err return err
} }
func Ping(socket string) bool {
_, err := GetPID(socket)
return err == nil
}
func IsReady(ctx context.Context, socket string) <-chan bool { func IsReady(ctx context.Context, socket string) <-chan bool {
out := make(chan bool, 1) out := make(chan bool, 1)
go func() { go func() {
defer close(out) defer close(out)
if Ping(socket) {
out <- true
return
}
ticker := time.NewTicker(100 * time.Millisecond) ticker := time.NewTicker(100 * time.Millisecond)
defer ticker.Stop() defer ticker.Stop()
for { for {
select { select {
case <-ticker.C: case <-ticker.C:
conn, err := net.Dial("unix", socket) if Ping(socket) {
if err == nil {
defer conn.Close()
out <- true out <- true
return return
} }

8
go.mod
View File

@ -1,5 +1,7 @@
module git.milar.in/milarin/mpvipc module git.tordarus.net/tordarus/mpvipc
go 1.21.5 go 1.23
require git.milar.in/milarin/channel v0.1.1 toolchain go1.24.4
require git.tordarus.net/tordarus/channel v0.1.19

4
go.sum
View File

@ -1,2 +1,2 @@
git.milar.in/milarin/channel v0.1.1 h1:s8+BdiOMmuRUDmChQ2i4G5GWsDCK9tKNHt1knLJx9zM= git.tordarus.net/tordarus/channel v0.1.19 h1:d9xnSwFyvBh4B1/82mt0A7Gpm2nIZJTc+9ceJMIOu5Q=
git.milar.in/milarin/channel v0.1.1/go.mod h1:We83LTI8S7u7II3pD+A2ChCDWJfCkcBUCUqii9HjTtM= git.tordarus.net/tordarus/channel v0.1.19/go.mod h1:8/dWFTdGO7g4AeSZ7cF6GerkGbe9c4dBVMVDBxOd9m4=

8
playlist_entry.go Normal file
View File

@ -0,0 +1,8 @@
package mpvipc
type PlaylistEntry struct {
Filename string `json:"filename"`
Current bool `json:"current"`
Playing bool `json:"playing"`
ID int `json:"id"`
}

View File

@ -49,6 +49,18 @@ func GetFileFormat(socket string) (string, error) {
return GetProperty[string](socket, "file-format") return GetProperty[string](socket, "file-format")
} }
func GetPlaylist(socket string) ([]PlaylistEntry, error) {
return GetProperty[[]PlaylistEntry](socket, "playlist")
}
func GetPause(socket string) (bool, error) {
return GetProperty[bool](socket, "pause")
}
func GetPlaylistPosition(socket string) (int, error) {
return GetProperty[int](socket, "playlist-pos")
}
func GetDuration(socket string) (time.Duration, error) { func GetDuration(socket string) (time.Duration, error) {
durationInSeconds, err := GetProperty[float64](socket, "duration") durationInSeconds, err := GetProperty[float64](socket, "duration")
if err != nil { if err != nil {

View File

@ -4,7 +4,7 @@ import (
"context" "context"
"time" "time"
"git.milar.in/milarin/channel" "git.tordarus.net/tordarus/channel"
) )
func ObserveEndOfFile(ctx context.Context, socket string) (<-chan string, error) { func ObserveEndOfFile(ctx context.Context, socket string) (<-chan string, error) {

View File

@ -21,3 +21,7 @@ func SetPercentPos(socket string, percentPos float64) error {
func SetVolume(socket string, volume float64) error { func SetVolume(socket string, volume float64) error {
return SetProperty[float64](socket, "volume", volume) return SetProperty[float64](socket, "volume", volume)
} }
func SetPlaylistPosition(socket string, index int) error {
return SetProperty(socket, "playlist-pos", index)
}

View File

@ -6,7 +6,7 @@ import (
"errors" "errors"
"net" "net"
"git.milar.in/milarin/channel" "git.tordarus.net/tordarus/channel"
) )
type Command struct { type Command struct {