ensure track artwork is fetched before updating Mac now playing metadata

This commit is contained in:
Drew Weymouth
2023-10-22 16:52:58 -07:00
parent 0148d9105b
commit 7e151cbb0e
2 changed files with 33 additions and 26 deletions
+4 -1
View File
@@ -112,7 +112,10 @@ func StartupApp(appName, displayAppName, appVersionTag, configFile, latestReleas
// OS media center integrations // OS media center integrations
a.setupMPRIS(displayAppName) 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 return a, nil
} }
+26 -22
View File
@@ -74,6 +74,32 @@ func InitMPMediaHandler(player *player.Player, playbackManager *PlaybackManager,
C.register_os_remote_commands() C.register_os_remote_commands()
mp.playbackManager.OnSongChange(func(track, _ *mediaprovider.Track) { 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 title, artist, artURL string
var duration int var duration int
if track != nil && track.ID != "" { if track != nil && track.ID != "" {
@@ -98,28 +124,6 @@ func InitMPMediaHandler(player *player.Player, playbackManager *PlaybackManager,
cTrackDuration := C.double(duration) cTrackDuration := C.double(duration)
C.set_os_now_playing_info(cTitle, cArtist, cArtURL, cTrackDuration) 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
} }
/** /**