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