add check for mpv version
This commit is contained in:
@@ -9,6 +9,8 @@ import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
@@ -20,6 +22,7 @@ import (
|
||||
var (
|
||||
ErrMPVTimeout = fmt.Errorf("mpv not responding")
|
||||
ErrMPVNeverStarted = fmt.Errorf("mpv never started")
|
||||
ErrMPVTooOld = fmt.Errorf("mpv too old")
|
||||
)
|
||||
|
||||
func MPVArg(k string, v any) string {
|
||||
@@ -72,6 +75,15 @@ func (j *Jukebox) Start(sockPath string, mpvExtraArgs []string) error {
|
||||
if err := j.conn.Open(); err != nil {
|
||||
return fmt.Errorf("open connection: %w", err)
|
||||
}
|
||||
|
||||
var mpvVersionStr string
|
||||
if err := j.getDecode(&mpvVersionStr, "mpv-version"); err != nil {
|
||||
return fmt.Errorf("get mpv version: %w", err)
|
||||
}
|
||||
if major, minor, patch := parseMPVVersion(mpvVersionStr); major == 0 && minor < 34 {
|
||||
return fmt.Errorf("%w: v0.34.0+ required, found v%d.%d.%d", ErrMPVTooOld, major, minor, patch)
|
||||
}
|
||||
|
||||
if _, err := j.conn.Call("observe_property", 0, "seekable"); err != nil {
|
||||
return fmt.Errorf("observe property: %w", err)
|
||||
}
|
||||
@@ -404,3 +416,16 @@ func lock(mu *sync.Mutex) func() {
|
||||
mu.Lock()
|
||||
return mu.Unlock
|
||||
}
|
||||
|
||||
var mpvVersionExpr = regexp.MustCompile(`mpv\s(\d+)\.(\d+)\.(\d+)`)
|
||||
|
||||
func parseMPVVersion(version string) (major, minor, patch int) {
|
||||
m := mpvVersionExpr.FindStringSubmatch(version)
|
||||
if len(m) != 4 {
|
||||
return
|
||||
}
|
||||
major, _ = strconv.Atoi(m[1])
|
||||
minor, _ = strconv.Atoi(m[2])
|
||||
patch, _ = strconv.Atoi(m[3])
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package jukebox_test
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
@@ -18,6 +19,9 @@ func newJukebox(t *testing.T) *jukebox.Jukebox {
|
||||
sockPath,
|
||||
[]string{jukebox.MPVArg("--ao", "null")},
|
||||
)
|
||||
if errors.Is(err, jukebox.ErrMPVTooOld) {
|
||||
t.Skip("old mpv found, skipping")
|
||||
}
|
||||
if err != nil {
|
||||
t.Fatalf("start jukebox: %v", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user