158 lines
5.0 KiB
TypeScript
158 lines
5.0 KiB
TypeScript
import { onBeforeUnmount, watch } from '@common/utils/vueTools'
|
|
import { useI18n } from '@renderer/plugins/i18n'
|
|
import { setTitle } from '@renderer/utils'
|
|
|
|
import {
|
|
setPause, setStop,
|
|
} from '@renderer/plugins/player'
|
|
|
|
import useMediaSessionInfo from './useMediaSessionInfo'
|
|
import usePlayProgress from './usePlayProgress'
|
|
import usePlayEvent from './usePlayEvent'
|
|
|
|
import {
|
|
musicInfo,
|
|
playMusicInfo,
|
|
playedList,
|
|
} from '@renderer/store/player/state'
|
|
import {
|
|
setPlay,
|
|
setAllStatus,
|
|
addPlayedList,
|
|
clearPlayedList,
|
|
// resetPlayerMusicInfo,
|
|
} from '@renderer/store/player/action'
|
|
|
|
import { appSetting } from '@renderer/store/setting'
|
|
|
|
import useLyric from './useLyric'
|
|
import useVolume from './useVolume'
|
|
import useWatchList from './useWatchList'
|
|
import { HOTKEY_PLAYER } from '@common/hotKey'
|
|
import { playNext, pause, playPrev, togglePlay } from '@renderer/core/player'
|
|
import usePlaybackRate from './usePlaybackRate'
|
|
import useSoundEffect from './useSoundEffect'
|
|
import { addListMusics, removeListMusics } from '@renderer/store/list/action'
|
|
import { loveList } from '@renderer/store/list/state'
|
|
import { addDislikeInfo } from '@renderer/core/dislikeList'
|
|
|
|
|
|
export default () => {
|
|
const t = useI18n()
|
|
|
|
usePlayProgress()
|
|
useMediaSessionInfo()
|
|
usePlayEvent()
|
|
useLyric()
|
|
useVolume()
|
|
useSoundEffect()
|
|
usePlaybackRate()
|
|
useWatchList()
|
|
|
|
const handlePlayNext = () => {
|
|
void playNext()
|
|
}
|
|
const handlePlayPrev = () => {
|
|
void playPrev()
|
|
}
|
|
|
|
const setPlayStatus = () => {
|
|
setPlay(true)
|
|
}
|
|
const setPauseStatus = () => {
|
|
setPlay(false)
|
|
if (window.lx.isPlayedStop) pause()
|
|
}
|
|
|
|
const handleUpdatePlayInfo = () => {
|
|
setTitle(musicInfo.id ? `${musicInfo.name} - ${musicInfo.singer}` : null)
|
|
}
|
|
|
|
const handleCanplay = () => {
|
|
if (window.lx.isPlayedStop) {
|
|
setPause()
|
|
}
|
|
}
|
|
const handleEnded = () => {
|
|
// setTimeout(() => {
|
|
if (window.lx.isPlayedStop) {
|
|
setAllStatus(t('player__end'))
|
|
return
|
|
}
|
|
// resetPlayerMusicInfo()
|
|
// window.app_event.stop()
|
|
setAllStatus(t('player__end'))
|
|
void playNext(true)
|
|
// })
|
|
}
|
|
|
|
const setStopStatus = () => {
|
|
setPlay(false)
|
|
setTitle(null)
|
|
setAllStatus('')
|
|
setStop()
|
|
}
|
|
|
|
const collectMusic = () => {
|
|
if (!playMusicInfo.musicInfo) return
|
|
void addListMusics(loveList.id, ['progress' in playMusicInfo.musicInfo ? playMusicInfo.musicInfo.metadata.musicInfo : playMusicInfo.musicInfo])
|
|
}
|
|
const unCollectMusic = () => {
|
|
if (!playMusicInfo.musicInfo) return
|
|
void removeListMusics({ listId: loveList.id, ids: ['progress' in playMusicInfo.musicInfo ? playMusicInfo.musicInfo.metadata.musicInfo.id : playMusicInfo.musicInfo.id] })
|
|
}
|
|
const dislikeMusic = async() => {
|
|
if (!playMusicInfo.musicInfo) return
|
|
const minfo = 'progress' in playMusicInfo.musicInfo ? playMusicInfo.musicInfo.metadata.musicInfo : playMusicInfo.musicInfo
|
|
await addDislikeInfo([{ name: minfo.name, singer: minfo.singer }])
|
|
playNext(true)
|
|
}
|
|
|
|
watch(() => appSetting['player.togglePlayMethod'], newValue => {
|
|
// setLoopPlay(newValue == 'singleLoop')
|
|
if (playedList.length) clearPlayedList()
|
|
if (newValue == 'random' && playMusicInfo.musicInfo && !playMusicInfo.isTempPlay) addPlayedList({ ...(playMusicInfo as LX.Player.PlayMusicInfo) })
|
|
})
|
|
|
|
// setLoopPlay(appSetting['player.togglePlayMethod'] == 'singleLoop')
|
|
|
|
|
|
window.key_event.on(HOTKEY_PLAYER.next.action, handlePlayNext)
|
|
window.key_event.on(HOTKEY_PLAYER.prev.action, handlePlayPrev)
|
|
window.key_event.on(HOTKEY_PLAYER.toggle_play.action, togglePlay)
|
|
window.key_event.on(HOTKEY_PLAYER.music_love.action, collectMusic)
|
|
window.key_event.on(HOTKEY_PLAYER.music_unlove.action, unCollectMusic)
|
|
window.key_event.on(HOTKEY_PLAYER.music_dislike.action, dislikeMusic)
|
|
|
|
window.app_event.on('play', setPlayStatus)
|
|
window.app_event.on('pause', setPauseStatus)
|
|
window.app_event.on('error', setPauseStatus)
|
|
window.app_event.on('stop', setStopStatus)
|
|
window.app_event.on('musicToggled', handleUpdatePlayInfo)
|
|
window.app_event.on('playerCanplay', handleCanplay)
|
|
|
|
window.app_event.on('playerEnded', handleEnded)
|
|
|
|
|
|
onBeforeUnmount(() => {
|
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
window.key_event.off(HOTKEY_PLAYER.next.action, handlePlayNext)
|
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
window.key_event.off(HOTKEY_PLAYER.prev.action, handlePlayPrev)
|
|
window.key_event.off(HOTKEY_PLAYER.toggle_play.action, togglePlay)
|
|
window.key_event.off(HOTKEY_PLAYER.music_love.action, collectMusic)
|
|
window.key_event.off(HOTKEY_PLAYER.music_unlove.action, unCollectMusic)
|
|
window.key_event.off(HOTKEY_PLAYER.music_dislike.action, dislikeMusic)
|
|
|
|
|
|
window.app_event.off('play', setPlayStatus)
|
|
window.app_event.off('pause', setPauseStatus)
|
|
window.app_event.off('error', setPauseStatus)
|
|
window.app_event.off('stop', setStopStatus)
|
|
window.app_event.off('musicToggled', handleUpdatePlayInfo)
|
|
window.app_event.on('playerCanplay', handleCanplay)
|
|
|
|
window.app_event.off('playerEnded', handleEnded)
|
|
})
|
|
}
|