rate-current CLI option (#847)
This commit is contained in:
@@ -203,8 +203,21 @@ func StartupApp(appName, displayAppName, appVersion, appVersionTag, latestReleas
|
|||||||
ipc.DestroyConn() // cleanup socket possibly orphaned by crashed process
|
ipc.DestroyConn() // cleanup socket possibly orphaned by crashed process
|
||||||
listener, err := ipc.Listen()
|
listener, err := ipc.Listen()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
ipcRatingHandler := func(rating int) {
|
||||||
|
if s := a.ServerManager.GetServer(); s != nil {
|
||||||
|
if tr := a.PlaybackManager.NowPlaying(); tr != nil && tr.Metadata().Type == mediaprovider.MediaItemTypeTrack {
|
||||||
|
if supportsRating, ok := s.(mediaprovider.SupportsRating); ok {
|
||||||
|
supportsRating.SetRating(mediaprovider.RatingFavoriteParameters{
|
||||||
|
TrackIDs: []string{tr.Metadata().ID},
|
||||||
|
}, rating)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
a.ipcServer = ipc.NewServer(
|
a.ipcServer = ipc.NewServer(
|
||||||
a.PlaybackManager,
|
a.PlaybackManager,
|
||||||
|
ipcRatingHandler,
|
||||||
a.ServerManager,
|
a.ServerManager,
|
||||||
a.callOnReactivate,
|
a.callOnReactivate,
|
||||||
func() { _ = a.callOnExit() })
|
func() { _ = a.callOnExit() })
|
||||||
@@ -650,6 +663,8 @@ func (a *App) checkFlagsAndSendIPCMsg(cli *ipc.Client) error {
|
|||||||
fmt.Println(data)
|
fmt.Println(data)
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
|
case RateCurrentCLIArg >= 0:
|
||||||
|
return cli.RateCurrentTrack(RateCurrentCLIArg)
|
||||||
default:
|
default:
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import (
|
|||||||
var (
|
var (
|
||||||
VolumeCLIArg int = -1
|
VolumeCLIArg int = -1
|
||||||
SeekToCLIArg float64 = -1
|
SeekToCLIArg float64 = -1
|
||||||
|
RateCurrentCLIArg int = -1
|
||||||
SeekByCLIArg float64 = 0
|
SeekByCLIArg float64 = 0
|
||||||
VolumePctCLIArg float64 = 0
|
VolumePctCLIArg float64 = 0
|
||||||
PlayAlbumCLIArg string = ""
|
PlayAlbumCLIArg string = ""
|
||||||
@@ -84,7 +85,9 @@ func init() {
|
|||||||
}
|
}
|
||||||
flag.Func("first-track", "start playing from given track (positive integer, to be used with either -play-album or -play-playlist)", func(s string) error {
|
flag.Func("first-track", "start playing from given track (positive integer, to be used with either -play-album or -play-playlist)", func(s string) error {
|
||||||
v, err := strconv.Atoi(s)
|
v, err := strconv.Atoi(s)
|
||||||
|
if err == nil {
|
||||||
FirstTrackCLIArg = v
|
FirstTrackCLIArg = v
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -100,6 +103,13 @@ func init() {
|
|||||||
SearchTrackCLIArg = s
|
SearchTrackCLIArg = s
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
flag.Func("rate-current", "rate the current track with the given rating (0-5)", func(s string) error {
|
||||||
|
v, err := strconv.Atoi(s)
|
||||||
|
if err == nil {
|
||||||
|
RateCurrentCLIArg = v
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func HaveCommandLineOptions() bool {
|
func HaveCommandLineOptions() bool {
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ const (
|
|||||||
VolumeAdjustPath = "/volume/adjust" // ?pct=<+/- percentage>
|
VolumeAdjustPath = "/volume/adjust" // ?pct=<+/- percentage>
|
||||||
ShowPath = "/window/show"
|
ShowPath = "/window/show"
|
||||||
QuitPath = "/window/quit"
|
QuitPath = "/window/quit"
|
||||||
|
RateCurrentTrackPath = "/current_track/rate" // ?r=<rating 0-5>
|
||||||
)
|
)
|
||||||
|
|
||||||
type Response struct {
|
type Response struct {
|
||||||
@@ -76,3 +77,7 @@ func BuildSearchTrackPath(search string) string {
|
|||||||
s := url.QueryEscape(search)
|
s := url.QueryEscape(search)
|
||||||
return fmt.Sprintf("%s?s=%s", SearchTrackPath, s)
|
return fmt.Sprintf("%s?s=%s", SearchTrackPath, s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BuildRateCurrentTrackPath(rating int) string {
|
||||||
|
return fmt.Sprintf("%s?r=%d", RateCurrentTrackPath, rating)
|
||||||
|
}
|
||||||
|
|||||||
@@ -118,6 +118,11 @@ func (c *Client) AdjustVolumePct(pct float64) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) RateCurrentTrack(rating int) error {
|
||||||
|
_, err := c.sendRequest(BuildRateCurrentTrackPath(rating))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Client) Show() error {
|
func (c *Client) Show() error {
|
||||||
_, err := c.sendRequest(ShowPath)
|
_, err := c.sendRequest(ShowPath)
|
||||||
return err
|
return err
|
||||||
|
|||||||
+18
-2
@@ -43,13 +43,14 @@ type ServerManager interface {
|
|||||||
type serverImpl struct {
|
type serverImpl struct {
|
||||||
server *http.Server
|
server *http.Server
|
||||||
pbHandler PlaybackHandler
|
pbHandler PlaybackHandler
|
||||||
|
rateFn func(int)
|
||||||
sm ServerManager
|
sm ServerManager
|
||||||
showFn func()
|
showFn func()
|
||||||
quitFn func()
|
quitFn func()
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewServer(pbHandler PlaybackHandler, sm ServerManager, showFn, quitFn func()) IPCServer {
|
func NewServer(pbHandler PlaybackHandler, rateFn func(int), sm ServerManager, showFn, quitFn func()) IPCServer {
|
||||||
s := &serverImpl{pbHandler: pbHandler, sm: sm, showFn: showFn, quitFn: quitFn}
|
s := &serverImpl{pbHandler: pbHandler, rateFn: rateFn, sm: sm, showFn: showFn, quitFn: quitFn}
|
||||||
s.server = &http.Server{
|
s.server = &http.Server{
|
||||||
Handler: s.createHandler(),
|
Handler: s.createHandler(),
|
||||||
}
|
}
|
||||||
@@ -172,6 +173,21 @@ func (s *serverImpl) createHandler() http.Handler {
|
|||||||
|
|
||||||
return tracks, nil
|
return tracks, nil
|
||||||
}))
|
}))
|
||||||
|
m.HandleFunc(RateCurrentTrackPath, func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
v := r.URL.Query().Get("r")
|
||||||
|
if rating, err := strconv.Atoi(v); err == nil {
|
||||||
|
// convert to 0-5 range if needed
|
||||||
|
if rating > 5 {
|
||||||
|
rating = 5
|
||||||
|
} else if rating < 0 {
|
||||||
|
rating = 0
|
||||||
|
}
|
||||||
|
s.rateFn(rating)
|
||||||
|
s.writeOK(w)
|
||||||
|
} else {
|
||||||
|
s.writeErr(w, err)
|
||||||
|
}
|
||||||
|
})
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user