Merge 16a46afe3db5abe484ec4c443acf9fa3c431b67c into eeb1bd5f41e17bfa54724704a19049fcaf87ed9a

This commit is contained in:
floatlesss 2026-03-03 20:16:22 +01:00 committed by GitHub
commit 1f38bcff55
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 55 additions and 4 deletions

View File

@ -161,6 +161,13 @@ const Player = () => {
}
}, [playerState, defaultOptions, isMobilePlayer])
// ReactJKMusicPlayer doesn't set playbackState, so we do it manually
const updateMediaSessionPlaybackState = useCallback((state) => {
if ('mediaSession' in navigator) {
navigator.mediaSession.playbackState = state
}
}, [])
const onAudioListsChange = useCallback(
(_, audioLists, audioInfo) => dispatch(syncQueue(audioInfo, audioLists)),
[dispatch],
@ -220,6 +227,7 @@ const Player = () => {
context.resume()
}
updateMediaSessionPlaybackState('playing')
dispatch(currentPlaying(info))
if (startTime === null) {
setStartTime(Date.now())
@ -248,7 +256,13 @@ const Player = () => {
}
}
},
[context, dispatch, showNotifications, startTime],
[
context,
dispatch,
showNotifications,
startTime,
updateMediaSessionPlaybackState,
],
)
const onAudioPlayTrackChange = useCallback(() => {
@ -261,12 +275,16 @@ const Player = () => {
}, [scrobbled, startTime])
const onAudioPause = useCallback(
(info) => dispatch(currentPlaying(info)),
[dispatch],
(info) => {
updateMediaSessionPlaybackState('paused')
dispatch(currentPlaying(info))
},
[dispatch, updateMediaSessionPlaybackState],
)
const onAudioEnded = useCallback(
(currentPlayId, audioLists, info) => {
updateMediaSessionPlaybackState('none')
setScrobbled(false)
setStartTime(null)
dispatch(currentPlaying(info))
@ -275,7 +293,7 @@ const Player = () => {
// eslint-disable-next-line no-console
.catch((e) => console.log('Keepalive error:', e))
},
[dispatch, dataProvider],
[dispatch, dataProvider, updateMediaSessionPlaybackState],
)
const onCoverClick = useCallback((mode, audioLists, audioInfo) => {

View File

@ -1,3 +1,4 @@
import { useCallback } from 'react'
import ReactJkMusicPlayer from 'navidrome-music-player'
import config, { shareInfo } from '../config'
import { shareCoverUrl, shareDownloadUrl, shareStreamUrl } from '../utils'
@ -39,6 +40,35 @@ const SharePlayer = () => {
src: shareDownloadUrl(shareInfo?.id),
})
}
// ReactJKMusicPlayer doesn't set playbackState, so we do it manually
const updateMediaSessionPlaybackState = useCallback((state) => {
if ('mediaSession' in navigator) {
navigator.mediaSession.playbackState = state
}
}, [])
const onAudioPlay = useCallback(
(_info) => {
updateMediaSessionPlaybackState('playing')
},
[updateMediaSessionPlaybackState],
)
const onAudioPause = useCallback(
(_info) => {
updateMediaSessionPlaybackState('paused')
},
[updateMediaSessionPlaybackState],
)
const onAudioEnded = useCallback(
(_currentPlayId, _audioLists, _info) => {
updateMediaSessionPlaybackState('none')
},
[updateMediaSessionPlaybackState],
)
const options = {
audioLists: list,
mode: 'full',
@ -59,6 +89,9 @@ const SharePlayer = () => {
<ReactJkMusicPlayer
{...options}
className={classes.player}
onAudioPlay={onAudioPlay}
onAudioPause={onAudioPause}
onAudioEnded={onAudioEnded}
onBeforeAudioDownload={onBeforeAudioDownload}
/>
)