mirror of
https://github.com/navidrome/navidrome.git
synced 2026-03-04 06:35:52 +00:00
Merge 16a46afe3db5abe484ec4c443acf9fa3c431b67c into eeb1bd5f41e17bfa54724704a19049fcaf87ed9a
This commit is contained in:
commit
1f38bcff55
@ -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) => {
|
||||
|
||||
@ -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}
|
||||
/>
|
||||
)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user