import React from 'react' import { useDispatch, useSelector } from 'react-redux' import { fetchUtils, useAuthState, useDataProvider, useTranslate } from 'react-admin' import ReactJkMusicPlayer from 'react-jinke-music-player' import 'react-jinke-music-player/assets/index.css' import { scrobble, syncQueue } from './queue' const Player = () => { const translate = useTranslate() const defaultOptions = { bounds: 'body', mode: 'full', autoPlay: true, preload: true, autoPlayInitLoadPlayList: true, clearPriorAudioLists: false, showDownload: false, showReload: false, glassBg: false, showThemeSwitch: false, playModeText: { order: translate('player.playModeText.order'), orderLoop: translate('player.playModeText.orderLoop'), singleLoop: translate('player.playModeText.singleLoop'), shufflePlay: translate('player.playModeText.shufflePlay') }, panelTitle: translate('player.panelTitle'), defaultPosition: { top: 300, left: 120 } } const addQueueToOptions = (queue) => { return { ...defaultOptions, autoPlay: true, clearPriorAudioLists: queue.clear, audioLists: queue.queue.map((item) => item) } } const dataProvider = useDataProvider() const dispatch = useDispatch() const queue = useSelector((state) => state.queue) const options = addQueueToOptions(queue) const { authenticated } = useAuthState() const OnAudioListsChange = (currentPlayIndex, audioLists) => { dispatch(syncQueue(audioLists)) } const OnAudioProgress = (info) => { const progress = (info.currentTime / info.duration) * 100 if (isNaN(info.duration) || progress < 90) { return } const item = queue.queue.find((item) => item.id === info.id) if (item && !item.scrobbled) { dispatch(scrobble(info.id)) fetchUtils.fetchJson(info.scrobble(true)) } } const OnAudioPlay = (info) => { if (info.duration) { fetchUtils.fetchJson(info.scrobble(false)) dataProvider.getOne('keepalive', { id: info.id }) } } if (authenticated && options.audioLists.length > 0) { return ( ) } return
} export default Player