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
|
||||
}
|
||||
|
||||
+29
-25
@@ -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.
|
||||
**/
|
||||
|
||||
Reference in New Issue
Block a user