ensure track artwork is fetched before updating Mac now playing metadata
This commit is contained in:
+4
-1
@@ -112,7 +112,10 @@ func StartupApp(appName, displayAppName, appVersionTag, configFile, latestReleas
|
||||
|
||||
// OS media center integrations
|
||||
a.setupMPRIS(displayAppName)
|
||||
InitMPMediaHandler(a.Player, a.PlaybackManager, a.ImageManager.GetCoverArtUrl)
|
||||
InitMPMediaHandler(a.Player, a.PlaybackManager, func(id string) (string, error) {
|
||||
a.ImageManager.GetCoverThumbnail(id) // ensure image is cached locally
|
||||
return a.ImageManager.GetCoverArtUrl(id)
|
||||
})
|
||||
|
||||
return a, nil
|
||||
}
|
||||
|
||||
+26
-22
@@ -74,6 +74,32 @@ func InitMPMediaHandler(player *player.Player, playbackManager *PlaybackManager,
|
||||
C.register_os_remote_commands()
|
||||
|
||||
mp.playbackManager.OnSongChange(func(track, _ *mediaprovider.Track) {
|
||||
// Asynchronously because artwork fetching can take time
|
||||
go mp.updateMetadata(track)
|
||||
})
|
||||
|
||||
mp.player.OnStopped(func() {
|
||||
C.set_os_playback_state_stopped()
|
||||
})
|
||||
|
||||
mp.player.OnSeek(func() {
|
||||
C.update_os_now_playing_info_position(C.double(mp.player.GetStatus().TimePos))
|
||||
})
|
||||
|
||||
mp.player.OnPlaying(func() {
|
||||
C.set_os_playback_state_playing()
|
||||
C.update_os_now_playing_info_position(C.double(mp.player.GetStatus().TimePos))
|
||||
})
|
||||
|
||||
mp.player.OnPaused(func() {
|
||||
C.set_os_playback_state_paused()
|
||||
C.update_os_now_playing_info_position(C.double(mp.player.GetStatus().TimePos))
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (mp *MPMediaHandler) updateMetadata(track *mediaprovider.Track) {
|
||||
var title, artist, artURL string
|
||||
var duration int
|
||||
if track != nil && track.ID != "" {
|
||||
@@ -98,28 +124,6 @@ func InitMPMediaHandler(player *player.Player, playbackManager *PlaybackManager,
|
||||
cTrackDuration := C.double(duration)
|
||||
|
||||
C.set_os_now_playing_info(cTitle, cArtist, cArtURL, cTrackDuration)
|
||||
|
||||
})
|
||||
|
||||
mp.player.OnStopped(func() {
|
||||
C.set_os_playback_state_stopped()
|
||||
})
|
||||
|
||||
mp.player.OnSeek(func() {
|
||||
C.update_os_now_playing_info_position(C.double(mp.player.GetStatus().TimePos))
|
||||
})
|
||||
|
||||
mp.player.OnPlaying(func() {
|
||||
C.set_os_playback_state_playing()
|
||||
C.update_os_now_playing_info_position(C.double(mp.player.GetStatus().TimePos))
|
||||
})
|
||||
|
||||
mp.player.OnPaused(func() {
|
||||
C.set_os_playback_state_paused()
|
||||
C.update_os_now_playing_info_position(C.double(mp.player.GetStatus().TimePos))
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user