start of JukeboxPlayer backend
This commit is contained in:
@@ -148,6 +148,25 @@ type SupportsRating interface {
|
||||
SetRating(params RatingFavoriteParameters, rating int) error
|
||||
}
|
||||
|
||||
type JukeboxProvider interface {
|
||||
JukeboxStart() error
|
||||
JukeboxStop() error
|
||||
JukeboxSeek(idx, seconds int) error
|
||||
JukeboxClear() error
|
||||
JukeboxSet(trackID string) error
|
||||
JukeboxAdd(trackID string) error
|
||||
JukeboxRemove(idx int) error
|
||||
JukeboxSetVolume(vol int) error
|
||||
JukeboxGetStatus() (*JukeboxStatus, error)
|
||||
}
|
||||
|
||||
type JukeboxStatus struct {
|
||||
Volume int
|
||||
CurrentTrack int
|
||||
Playing bool
|
||||
PositionSeconds float64
|
||||
}
|
||||
|
||||
func genresMatch(filterGenres, albumGenres []string) bool {
|
||||
for _, g1 := range filterGenres {
|
||||
for _, g2 := range albumGenres {
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
package subsonic
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"github.com/dweymouth/supersonic/backend/mediaprovider"
|
||||
)
|
||||
|
||||
var _ mediaprovider.JukeboxProvider = (*subsonicMediaProvider)(nil)
|
||||
|
||||
func (s *subsonicMediaProvider) JukeboxStart() error {
|
||||
_, err := s.client.JukeboxControl("start", nil)
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *subsonicMediaProvider) JukeboxStop() error {
|
||||
_, err := s.client.JukeboxControl("stop", nil)
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *subsonicMediaProvider) JukeboxClear() error {
|
||||
_, err := s.client.JukeboxControl("clear", nil)
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *subsonicMediaProvider) JukeboxSetVolume(vol int) error {
|
||||
_, err := s.client.JukeboxControl("setGain",
|
||||
map[string]string{"gain": strconv.Itoa(vol)})
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *subsonicMediaProvider) JukeboxSeek(idx, seconds int) error {
|
||||
_, err := s.client.JukeboxControl("skip",
|
||||
map[string]string{"index": strconv.Itoa(idx), "offset": strconv.Itoa(seconds)})
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *subsonicMediaProvider) JukeboxRemove(idx int) error {
|
||||
_, err := s.client.JukeboxControl("remove",
|
||||
map[string]string{"index": strconv.Itoa(idx)})
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *subsonicMediaProvider) JukeboxSet(trackID string) error {
|
||||
_, err := s.client.JukeboxControl("set",
|
||||
map[string]string{"id": trackID})
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *subsonicMediaProvider) JukeboxAdd(trackID string) error {
|
||||
_, err := s.client.JukeboxControl("add",
|
||||
map[string]string{"id": trackID})
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *subsonicMediaProvider) JukeboxGetStatus() (*mediaprovider.JukeboxStatus, error) {
|
||||
stat, err := s.client.JukeboxControl("status", nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &mediaprovider.JukeboxStatus{
|
||||
Volume: int(stat.Gain * 100),
|
||||
CurrentTrack: stat.CurrentIndex,
|
||||
Playing: stat.Playing,
|
||||
PositionSeconds: float64(stat.Position),
|
||||
}, nil
|
||||
}
|
||||
@@ -229,8 +229,8 @@ func (p *PlaybackManager) LoadTracks(tracks []*mediaprovider.Track, appendToQueu
|
||||
return err
|
||||
}
|
||||
urlP.AppendFile(url)
|
||||
} else if trP, ok := p.player.(player.TrackIDPlayer); ok {
|
||||
trP.AppendTrack(tracks[i].ID)
|
||||
} else if trP, ok := p.player.(player.TrackPlayer); ok {
|
||||
trP.AppendTrack(tracks[i])
|
||||
} else {
|
||||
panic("unsupported player type")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user