Skip to content

Commit

Permalink
add check for mpv version
Browse files Browse the repository at this point in the history
  • Loading branch information
sentriz committed Nov 16, 2022
1 parent e1488b0 commit 44800e9
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
25 changes: 25 additions & 0 deletions jukebox/jukebox.go
Expand Up @@ -9,6 +9,8 @@ import (
"os"
"os/exec"
"path/filepath"
"regexp"
"strconv"
"sync"
"time"

Expand All @@ -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 {
Expand Down Expand Up @@ -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)
}
Expand Down Expand Up @@ -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
}
4 changes: 4 additions & 0 deletions jukebox/jukebox_test.go
@@ -1,6 +1,7 @@
package jukebox_test

import (
"errors"
"os"
"path/filepath"
"sort"
Expand All @@ -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)
}
Expand Down

0 comments on commit 44800e9

Please sign in to comment.