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
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
}
+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.
**/