implement MPRIS SetVolume
This commit is contained in:
+7
-2
@@ -59,6 +59,11 @@ func NewMPRISHandler(playerName string, p *player.Player, pm *PlaybackManager) *
|
||||
m.evt.Player.OnTitle()
|
||||
}
|
||||
})
|
||||
m.pm.OnVolumeChange(func(vol int) {
|
||||
if m.connErr == nil {
|
||||
m.evt.Player.OnVolume()
|
||||
}
|
||||
})
|
||||
emitPlayStatus := func() {
|
||||
if m.connErr == nil {
|
||||
m.evt.Player.OnPlayPause()
|
||||
@@ -253,8 +258,8 @@ func (m *MPRISHandler) Volume() (float64, error) {
|
||||
return float64(m.p.GetVolume()) / 100, nil
|
||||
}
|
||||
|
||||
func (m *MPRISHandler) SetVolume(float64) error {
|
||||
return errNotImplemented
|
||||
func (m *MPRISHandler) SetVolume(v float64) error {
|
||||
return m.pm.SetVolume(int(v * 100))
|
||||
}
|
||||
|
||||
func (m *MPRISHandler) Position() (int64, error) {
|
||||
|
||||
@@ -49,6 +49,7 @@ type PlaybackManager struct {
|
||||
onSongChange []func(nowPlaying, justScrobbledIfAny *mediaprovider.Track)
|
||||
onPlayTimeUpdate []func(float64, float64)
|
||||
onLoopModeChange []func(LoopMode)
|
||||
onVolumeChange []func(int)
|
||||
}
|
||||
|
||||
func NewPlaybackManager(
|
||||
@@ -142,6 +143,11 @@ func (p *PlaybackManager) OnLoopModeChange(cb func(LoopMode)) {
|
||||
p.onLoopModeChange = append(p.onLoopModeChange, cb)
|
||||
}
|
||||
|
||||
// Registers a callback that is notified whenever the volume changes.
|
||||
func (p *PlaybackManager) OnVolumeChange(cb func(int)) {
|
||||
p.onVolumeChange = append(p.onVolumeChange, cb)
|
||||
}
|
||||
|
||||
// Loads the specified album into the play queue.
|
||||
func (p *PlaybackManager) LoadAlbum(albumID string, appendToQueue bool, shuffle bool) error {
|
||||
album, err := p.sm.Server.GetAlbum(albumID)
|
||||
@@ -335,6 +341,21 @@ func (p *PlaybackManager) LoopMode() LoopMode {
|
||||
return LoopMode(p.player.GetLoopMode())
|
||||
}
|
||||
|
||||
func (p *PlaybackManager) SetVolume(vol int) error {
|
||||
vol = clamp(vol, 0, 100)
|
||||
if err := p.player.SetVolume(vol); err != nil {
|
||||
return err
|
||||
}
|
||||
for _, cb := range p.onVolumeChange {
|
||||
cb(vol)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *PlaybackManager) Volume() int {
|
||||
return p.player.GetVolume()
|
||||
}
|
||||
|
||||
// call BEFORE updating p.nowPlayingIdx
|
||||
func (p *PlaybackManager) checkScrobble() {
|
||||
if !p.scrobbleCfg.Enabled || len(p.playQueue) == 0 || p.nowPlayingIdx < 0 {
|
||||
|
||||
Reference in New Issue
Block a user