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
+29 -25
View File
@@ -74,31 +74,8 @@ func InitMPMediaHandler(player *player.Player, playbackManager *PlaybackManager,
C.register_os_remote_commands()
mp.playbackManager.OnSongChange(func(track, _ *mediaprovider.Track) {
var title, artist, artURL string
var duration int
if track != nil && track.ID != "" {
var err error
if artURL, err = mp.artURLLookup(track.CoverArtID); err != nil {
log.Printf("error fetching art url: %s", err.Error())
}
title = track.Name
artist = strings.Join(track.ArtistNames, ", ")
duration = track.Duration
}
cTitle := C.CString(title)
defer C.free(unsafe.Pointer(cTitle))
cArtist := C.CString(artist)
defer C.free(unsafe.Pointer(cArtist))
cArtURL := C.CString(artURL)
defer C.free(unsafe.Pointer(cArtURL))
cTrackDuration := C.double(duration)
C.set_os_now_playing_info(cTitle, cArtist, cArtURL, cTrackDuration)
// Asynchronously because artwork fetching can take time
go mp.updateMetadata(track)
})
mp.player.OnStopped(func() {
@@ -122,6 +99,33 @@ func InitMPMediaHandler(player *player.Player, playbackManager *PlaybackManager,
return nil
}
func (mp *MPMediaHandler) updateMetadata(track *mediaprovider.Track) {
var title, artist, artURL string
var duration int
if track != nil && track.ID != "" {
var err error
if artURL, err = mp.artURLLookup(track.CoverArtID); err != nil {
log.Printf("error fetching art url: %s", err.Error())
}
title = track.Name
artist = strings.Join(track.ArtistNames, ", ")
duration = track.Duration
}
cTitle := C.CString(title)
defer C.free(unsafe.Pointer(cTitle))
cArtist := C.CString(artist)
defer C.free(unsafe.Pointer(cArtist))
cArtURL := C.CString(artURL)
defer C.free(unsafe.Pointer(cArtURL))
cTrackDuration := C.double(duration)
C.set_os_now_playing_info(cTitle, cArtist, cArtURL, cTrackDuration)
}
/**
* Handle incoming OS commands.
**/