start of JukeboxPlayer backend

This commit is contained in:
Drew Weymouth
2023-12-19 17:31:10 -08:00
parent f8f8a3a5cb
commit 1e466e4cdf
7 changed files with 227 additions and 9 deletions
+19
View File
@@ -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 {
+67
View File
@@ -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
}
+2 -2
View File
@@ -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")
}