add check for mpv version
This commit is contained in:
@@ -9,6 +9,8 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"regexp"
|
||||||
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -20,6 +22,7 @@ import (
|
|||||||
var (
|
var (
|
||||||
ErrMPVTimeout = fmt.Errorf("mpv not responding")
|
ErrMPVTimeout = fmt.Errorf("mpv not responding")
|
||||||
ErrMPVNeverStarted = fmt.Errorf("mpv never started")
|
ErrMPVNeverStarted = fmt.Errorf("mpv never started")
|
||||||
|
ErrMPVTooOld = fmt.Errorf("mpv too old")
|
||||||
)
|
)
|
||||||
|
|
||||||
func MPVArg(k string, v any) string {
|
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 {
|
if err := j.conn.Open(); err != nil {
|
||||||
return fmt.Errorf("open connection: %w", err)
|
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 {
|
if _, err := j.conn.Call("observe_property", 0, "seekable"); err != nil {
|
||||||
return fmt.Errorf("observe property: %w", err)
|
return fmt.Errorf("observe property: %w", err)
|
||||||
}
|
}
|
||||||
@@ -404,3 +416,16 @@ func lock(mu *sync.Mutex) func() {
|
|||||||
mu.Lock()
|
mu.Lock()
|
||||||
return mu.Unlock
|
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
|
package jukebox_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"sort"
|
"sort"
|
||||||
@@ -18,6 +19,9 @@ func newJukebox(t *testing.T) *jukebox.Jukebox {
|
|||||||
sockPath,
|
sockPath,
|
||||||
[]string{jukebox.MPVArg("--ao", "null")},
|
[]string{jukebox.MPVArg("--ao", "null")},
|
||||||
)
|
)
|
||||||
|
if errors.Is(err, jukebox.ErrMPVTooOld) {
|
||||||
|
t.Skip("old mpv found, skipping")
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("start jukebox: %v", err)
|
t.Fatalf("start jukebox: %v", err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user