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
|
// 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
|
||||||
}
|
}
|
||||||
|
|||||||
+29
-25
@@ -74,31 +74,8 @@ 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) {
|
||||||
var title, artist, artURL string
|
// Asynchronously because artwork fetching can take time
|
||||||
var duration int
|
go mp.updateMetadata(track)
|
||||||
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)
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
mp.player.OnStopped(func() {
|
mp.player.OnStopped(func() {
|
||||||
@@ -122,6 +99,33 @@ func InitMPMediaHandler(player *player.Player, playbackManager *PlaybackManager,
|
|||||||
return nil
|
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.
|
* Handle incoming OS commands.
|
||||||
**/
|
**/
|
||||||
|
|||||||
Reference in New Issue
Block a user