145 lines
4.7 KiB
JavaScript
145 lines
4.7 KiB
JavaScript
import { onBeforeUnmount, watch, markRawList } from '@renderer/utils/vueTools'
|
|
import Lyric from '@renderer/utils/lyric-font-player'
|
|
import { getCurrentTime as getPlayerCurrentTime } from '@renderer/plugins/player'
|
|
import { setDesktopLyricInfo, onGetDesktopLyricInfo } from '@renderer/utils/tools'
|
|
import { player as eventPlayerNames } from '@renderer/event/names'
|
|
import { lyric, setText, setLines, setOffset, setTempOffset } from '@renderer/core/share/lyric'
|
|
import { musicInfo, setStatusText, isPlay, playMusicInfo } from '@renderer/core/share/player'
|
|
|
|
export default ({ setting }) => {
|
|
const lrc = window.lrc = new Lyric({
|
|
lineClassName: 'lrc-content',
|
|
fontClassName: 'font',
|
|
shadowContent: false,
|
|
activeLineClassName: 'active',
|
|
onPlay(line, text) {
|
|
setText(text, line)
|
|
setStatusText(text)
|
|
// console.log(line, text)
|
|
},
|
|
onSetLyric(lines, offset) { // listening lyrics seting event
|
|
// console.log(lines) // lines is array of all lyric text
|
|
setLines(markRawList([...lines]))
|
|
setText(lines[0] ?? '', 0)
|
|
setOffset(offset) // 歌词延迟
|
|
setTempOffset(0) // 重置临时延迟
|
|
},
|
|
// offset: 80,
|
|
})
|
|
|
|
const getCurrentTime = () => {
|
|
return getPlayerCurrentTime() * 1000 + lyric.tempOffset
|
|
}
|
|
|
|
|
|
const setPlayInfo = ({ musicInfo }) => {
|
|
setDesktopLyricInfo('music_info', {
|
|
songmid: musicInfo.songmid,
|
|
singer: musicInfo.singer,
|
|
name: musicInfo.name,
|
|
album: musicInfo.album,
|
|
})
|
|
}
|
|
|
|
const setLyric = () => {
|
|
if (!musicInfo.songmid) return
|
|
const extendedLyrics = []
|
|
if (setting.value.player.isShowLyricTranslation && musicInfo.tlrc) extendedLyrics.push(musicInfo.tlrc)
|
|
if (setting.value.player.isShowLyricRoma && musicInfo.rlrc) extendedLyrics.push(musicInfo.rlrc)
|
|
lrc.setLyric(
|
|
setting.value.player.isPlayLxlrc && musicInfo.lxlrc ? musicInfo.lxlrc : musicInfo.lrc,
|
|
extendedLyrics,
|
|
)
|
|
setDesktopLyricInfo('lyric', { lrc: musicInfo.lrc, tlrc: musicInfo.tlrc, rlrc: musicInfo.rlrc, lxlrc: musicInfo.lxlrc })
|
|
|
|
if (isPlay.value && (musicInfo.url || playMusicInfo.listId == 'download')) {
|
|
setTimeout(() => {
|
|
const time = getCurrentTime()
|
|
setDesktopLyricInfo('play', time)
|
|
lrc.play(time)
|
|
})
|
|
}
|
|
}
|
|
|
|
const setLyricOffset = offset => {
|
|
setTempOffset(offset)
|
|
if (isPlay.value && (musicInfo.url || playMusicInfo.listId == 'download')) {
|
|
setTimeout(() => {
|
|
const time = getCurrentTime()
|
|
setDesktopLyricInfo('play', time)
|
|
lrc.play(time)
|
|
})
|
|
}
|
|
}
|
|
|
|
const handlePlay = () => {
|
|
if (!musicInfo.lrc) return
|
|
const currentTime = getCurrentTime()
|
|
lrc.play(currentTime)
|
|
setDesktopLyricInfo('play', currentTime)
|
|
}
|
|
const handlePause = () => {
|
|
lrc.pause()
|
|
setDesktopLyricInfo('pause')
|
|
}
|
|
const handleStop = () => {
|
|
lrc.pause()
|
|
setDesktopLyricInfo('stop')
|
|
setLines([])
|
|
setText('', 0)
|
|
}
|
|
|
|
watch(() => setting.value.player.isShowLyricTranslation, setLyric)
|
|
watch(() => setting.value.player.isPlayLxlrc, setLyric)
|
|
|
|
const rGetDesktopLyricInfo = onGetDesktopLyricInfo((event, info) => {
|
|
switch (info.action) {
|
|
case 'info':
|
|
setDesktopLyricInfo('info', {
|
|
songmid: musicInfo.songmid,
|
|
singer: musicInfo.singer,
|
|
name: musicInfo.name,
|
|
album: musicInfo.album,
|
|
lrc: musicInfo.lrc,
|
|
tlrc: musicInfo.tlrc,
|
|
rlrc: musicInfo.rlrc,
|
|
lxlrc: musicInfo.lxlrc,
|
|
isPlay: isPlay.value,
|
|
line: lyric.line,
|
|
played_time: getCurrentTime(),
|
|
}, info)
|
|
break
|
|
case 'status':
|
|
setDesktopLyricInfo('status', {
|
|
isPlay: isPlay.value,
|
|
line: lyric.line,
|
|
played_time: getCurrentTime(),
|
|
}, info)
|
|
break
|
|
|
|
default:
|
|
break
|
|
}
|
|
})
|
|
|
|
|
|
window.eventHub.on(eventPlayerNames.play, handlePlay)
|
|
window.eventHub.on(eventPlayerNames.pause, handlePause)
|
|
window.eventHub.on(eventPlayerNames.stop, handleStop)
|
|
window.eventHub.on(eventPlayerNames.error, handlePause)
|
|
window.eventHub.on(eventPlayerNames.setPlayInfo, setPlayInfo)
|
|
window.eventHub.on(eventPlayerNames.updateLyric, setLyric)
|
|
window.eventHub.on(eventPlayerNames.updateLyricOffset, setLyricOffset)
|
|
|
|
onBeforeUnmount(() => {
|
|
rGetDesktopLyricInfo()
|
|
window.eventHub.off(eventPlayerNames.play, handlePlay)
|
|
window.eventHub.off(eventPlayerNames.pause, handlePause)
|
|
window.eventHub.off(eventPlayerNames.stop, handleStop)
|
|
window.eventHub.off(eventPlayerNames.error, handlePause)
|
|
window.eventHub.off(eventPlayerNames.setPlayInfo, setPlayInfo)
|
|
window.eventHub.off(eventPlayerNames.updateLyric, setLyric)
|
|
window.eventHub.off(eventPlayerNames.updateLyricOffset, setLyricOffset)
|
|
})
|
|
}
|