upgrade go-mpris-server; gracefully handle no dbus connection

This commit is contained in:
Drew Weymouth
2023-07-13 12:51:19 -07:00
parent 8a1a3795bc
commit 41053a22a8
3 changed files with 31 additions and 16 deletions
+27 -12
View File
@@ -18,8 +18,9 @@ var (
_ types.OrgMprisMediaPlayer2Adapter = (*MPRISHandler)(nil)
_ types.OrgMprisMediaPlayer2PlayerAdapter = (*MPRISHandler)(nil)
)
var (
notImplemented = errors.New("not implemented")
errNotImplemented = errors.New("not implemented")
)
type MPRISHandler struct {
@@ -33,6 +34,7 @@ type MPRISHandler struct {
// Function to look up the artwork URL for a given track ID
ArtURLLookup func(trackID string) (string, error)
connErr error
playerName string
p *player.Player
pm *PlaybackManager
@@ -41,19 +43,25 @@ type MPRISHandler struct {
}
func NewMPRISHandler(playerName string, p *player.Player, pm *PlaybackManager) *MPRISHandler {
m := &MPRISHandler{playerName: playerName, p: p, pm: pm}
m := &MPRISHandler{playerName: playerName, p: p, pm: pm, connErr: errors.New("not started")}
m.s = server.NewServer(playerName, m, m)
m.evt = events.NewEventHandler(m.s)
m.p.OnSeek(func() {
pos := secondsToMicroseconds(m.p.GetStatus().TimePos)
m.evt.Player.OnSeek(pos)
if m.connErr == nil {
pos := secondsToMicroseconds(m.p.GetStatus().TimePos)
m.evt.Player.OnSeek(pos)
}
})
m.pm.OnSongChange(func(_, _ *mediaprovider.Track) {
m.evt.Player.OnTitle()
if m.connErr == nil {
m.evt.Player.OnTitle()
}
})
emitPlayStatus := func() {
m.evt.Player.OnPlayPause()
if m.connErr == nil {
m.evt.Player.OnPlayPause()
}
}
m.p.OnStopped(emitPlayStatus)
m.p.OnPlaying(emitPlayStatus)
@@ -64,12 +72,19 @@ func NewMPRISHandler(playerName string, p *player.Player, pm *PlaybackManager) *
// Starts listening for MPRIS events.
func (m *MPRISHandler) Start() {
go m.s.Listen()
m.connErr = nil
go func() {
// exits early with err if unable to establish D-Bus connection
m.connErr = m.s.Listen()
}()
}
// Stops listening for MPRIS events and releases any D-Bus resources.
func (m *MPRISHandler) Shutdown() {
m.s.Stop()
if m.connErr == nil {
m.s.Stop()
m.connErr = errors.New("stopped")
}
}
// OrgMprisMediaPlayer2Adapter implementation
@@ -152,11 +167,11 @@ func (m *MPRISHandler) Seek(offset types.Microseconds) error {
}
func (m *MPRISHandler) SetPosition(trackId string, position types.Microseconds) error {
return notImplemented
return errNotImplemented
}
func (m *MPRISHandler) OpenUri(uri string) error {
return notImplemented
return errNotImplemented
}
func (m *MPRISHandler) PlaybackStatus() (types.PlaybackStatus, error) {
@@ -176,7 +191,7 @@ func (m *MPRISHandler) Rate() (float64, error) {
}
func (m *MPRISHandler) SetRate(float64) error {
return notImplemented
return errNotImplemented
}
func (m *MPRISHandler) Metadata() (types.Metadata, error) {
@@ -214,7 +229,7 @@ func (m *MPRISHandler) Volume() (float64, error) {
}
func (m *MPRISHandler) SetVolume(float64) error {
return notImplemented
return errNotImplemented
}
func (m *MPRISHandler) Position() (int64, error) {
+2 -2
View File
@@ -9,8 +9,10 @@ require (
github.com/dweymouth/go-mpv v0.0.0-20230406003141-7f1858e503ee
github.com/dweymouth/go-subsonic v0.0.0-20230614154319-792d18c75fb4
github.com/fsnotify/fsnotify v1.6.0
github.com/godbus/dbus/v5 v5.1.0
github.com/google/uuid v1.3.0
github.com/pelletier/go-toml/v2 v2.0.8
github.com/quarckster/go-mpris-server v1.0.1
github.com/zalando/go-keyring v0.2.1
golang.org/x/net v0.0.0-20220722155237-a158d28d115b
)
@@ -27,13 +29,11 @@ require (
github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6 // indirect
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b // indirect
github.com/go-text/typesetting v0.0.0-20230405155246-bf9c697c6e16 // indirect
github.com/godbus/dbus/v5 v5.1.0 // indirect
github.com/goki/freetype v0.0.0-20220119013949-7a161fd3728c // indirect
github.com/gopherjs/gopherjs v1.17.2 // indirect
github.com/jsummers/gobmp v0.0.0-20151104160322-e2ba15ffa76e // indirect
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/quarckster/go-mpris-server v1.0.0 // indirect
github.com/srwiley/oksvg v0.0.0-20220731023508-a61f04f16b76 // indirect
github.com/srwiley/rasterx v0.0.0-20210519020934-456a8d69b780 // indirect
github.com/stretchr/testify v1.8.3 // indirect
+2 -2
View File
@@ -265,8 +265,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/quarckster/go-mpris-server v1.0.0 h1:9EKh8Ink7d3OigBLXGlRJ0jDJi+O6T/XMroA5Gl4c5Q=
github.com/quarckster/go-mpris-server v1.0.0/go.mod h1:2b4IdrpnEoEfU+6fQKjYhAgdvsiz4JxmTpDAUrMJVO4=
github.com/quarckster/go-mpris-server v1.0.1 h1:JAbVBJK1ijjwEH4gfaOtwfElDVuaBPnWyi8rZJEHOxc=
github.com/quarckster/go-mpris-server v1.0.1/go.mod h1:2b4IdrpnEoEfU+6fQKjYhAgdvsiz4JxmTpDAUrMJVO4=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=