more mpris features

This commit is contained in:
Drew Weymouth
2023-07-12 17:41:16 -07:00
parent 2a17718969
commit 61d5ad917d
4 changed files with 60 additions and 13 deletions
+29 -6
View File
@@ -38,7 +38,10 @@ type App struct {
Player *player.Player
UpdateChecker UpdateChecker
MPRISHandler *MPRISHandler
OnReactivate func()
// UI callbacks to be set in main
OnReactivate func()
OnExit func()
appName string
appVersionTag string
@@ -104,8 +107,7 @@ func StartupApp(appName, displayAppName, appVersionTag, configFile, latestReleas
_, _ = a.ImageManager.GetCoverThumbnail(coverID)
})
a.MPRISHandler = NewMPRISHandler(displayAppName, a.Player, a.PlaybackManager)
a.MPRISHandler.Start()
a.setupMPRIS(displayAppName)
return a, nil
}
@@ -138,9 +140,7 @@ func (a *App) startSessionWatcher(sessionPath string) {
activatePath := path.Join(sessionPath, sessionActivateFile)
if _, err := os.Stat(activatePath); err == nil {
os.Remove(path.Join(sessionPath, sessionActivateFile))
if a.OnReactivate != nil {
a.OnReactivate()
}
a.callOnReactivate()
}
}
}
@@ -148,6 +148,12 @@ func (a *App) startSessionWatcher(sessionPath string) {
}
}
func (a *App) callOnReactivate() {
if a.OnReactivate != nil {
a.OnReactivate()
}
}
func (a *App) initMPV() error {
p := player.NewWithClientName(a.appName)
c := a.Config.LocalPlayback
@@ -206,6 +212,23 @@ func (a *App) setupMPV() error {
return nil
}
func (a *App) setupMPRIS(mprisAppName string) {
a.MPRISHandler = NewMPRISHandler(mprisAppName, a.Player, a.PlaybackManager)
a.MPRISHandler.ArtURLLookup = a.ImageManager.GetCoverArtUrl
a.MPRISHandler.OnRaise = func() error { a.callOnReactivate(); return nil }
a.MPRISHandler.OnQuit = func() error {
if a.OnExit == nil {
return errors.New("no quit handler registered")
}
go func() {
time.Sleep(10 * time.Millisecond)
a.OnExit()
}()
return nil
}
a.MPRISHandler.Start()
}
func (a *App) LoginToDefaultServer(string) error {
serverCfg := a.ServerManager.GetDefaultServer()
if serverCfg == nil {