add -seek-by CLI arg

This commit is contained in:
Drew Weymouth
2024-06-23 16:09:50 -07:00
parent 46b7e386f4
commit 17dfa1132f
7 changed files with 44 additions and 10 deletions
+5
View File
@@ -11,6 +11,7 @@ const (
PreviousPath = "/transport/previous"
NextPath = "/transport/next"
TimePosPath = "/transport/timepos" // ?s=<seconds>
SeekByPath = "/transport/seek-by" // ?s=<+/- seconds>
VolumePath = "/volume" // ?v=<vol>
ShowPath = "/window/show"
QuitPath = "/window/quit"
@@ -27,3 +28,7 @@ func SetVolumePath(vol int) string {
func SeekToSecondsPath(secs float64) string {
return fmt.Sprintf("%s?s=%0.2f", TimePosPath, secs)
}
func SeekBySecondsPath(secs float64) string {
return fmt.Sprintf("%s?s=%0.2f", SeekByPath, secs)
}
+4
View File
@@ -60,6 +60,10 @@ func (c *Client) SeekSeconds(secs float64) error {
return c.sendRequest(SeekToSecondsPath(secs))
}
func (c *Client) SeekBySeconds(secs float64) error {
return c.sendRequest(SeekBySecondsPath(secs))
}
func (c *Client) SetVolume(vol int) error {
return c.sendRequest(SetVolumePath(vol))
}
+14 -8
View File
@@ -16,6 +16,7 @@ type PlaybackHandler interface {
SeekBackOrPrevious() error
SeekNext() error
SeekSeconds(float64) error
SeekBySeconds(float64) error
Volume() int
SetVolume(int) error
}
@@ -71,14 +72,8 @@ func (s *serverImpl) createHandler() http.Handler {
m.HandleFunc(StopPath, s.makeSimpleEndpointHandler(s.pbHandler.Stop))
m.HandleFunc(PreviousPath, s.makeSimpleEndpointHandler(s.pbHandler.SeekBackOrPrevious))
m.HandleFunc(NextPath, s.makeSimpleEndpointHandler(s.pbHandler.SeekNext))
m.HandleFunc(TimePosPath, func(w http.ResponseWriter, r *http.Request) {
_s := r.URL.Query().Get("s")
if secs, err := strconv.ParseFloat(_s, 64); err == nil {
s.writeSimpleResponse(w, s.pbHandler.SeekSeconds(secs))
} else {
s.writeErr(w, err)
}
})
m.HandleFunc(TimePosPath, s.makeFloatEndpointHandler(s.pbHandler.SeekSeconds, "s"))
m.HandleFunc(SeekByPath, s.makeFloatEndpointHandler(s.pbHandler.SeekBySeconds, "s"))
m.HandleFunc(VolumePath, func(w http.ResponseWriter, r *http.Request) {
v := r.URL.Query().Get("v")
if vol, err := strconv.Atoi(v); err == nil {
@@ -96,6 +91,17 @@ func (s *serverImpl) makeSimpleEndpointHandler(f func() error) func(http.Respons
}
}
func (s *serverImpl) makeFloatEndpointHandler(f func(float64) error, queryParam string) func(http.ResponseWriter, *http.Request) {
return func(w http.ResponseWriter, r *http.Request) {
v := r.URL.Query().Get(queryParam)
if val, err := strconv.ParseFloat(v, 64); err == nil {
s.writeSimpleResponse(w, f(val))
} else {
s.writeErr(w, err)
}
}
}
func (s *serverImpl) writeSimpleResponse(w http.ResponseWriter, err error) {
if err == nil {
s.writeOK(w)