Files
lx-music-mobile-mod/src/store/player/action.ts

114 lines
4.0 KiB
TypeScript

import { arrPush, arrUnshift, formatPlayTime2 } from '@/utils'
import state from './state'
type PlayerMusicInfoKeys = keyof LX.Player.MusicInfo
const musicInfoKeys: PlayerMusicInfoKeys[] = Object.keys(state.musicInfo) as PlayerMusicInfoKeys[]
export default {
updatePlayIndex(playIndex: number, playerPlayIndex: number) {
state.playInfo.playIndex = playIndex
state.playInfo.playerPlayIndex = playerPlayIndex
global.state_event.playInfoChanged({ ...state.playInfo })
},
setPlayListId(playerListId: string | null) {
state.playInfo.playerListId = playerListId
global.state_event.playInfoChanged({ ...state.playInfo })
},
setPlayMusicInfo(listId: string | null, musicInfo: LX.Download.ListItem | LX.Music.MusicInfo | null, isTempPlay: boolean = false) {
state.playMusicInfo = { listId, musicInfo, isTempPlay }
global.state_event.playMusicInfoChanged(state.playMusicInfo)
},
setMusicInfo(_musicInfo: Partial<LX.Player.MusicInfo>) {
for (const key of musicInfoKeys) {
const val = _musicInfo[key]
if (val !== undefined) {
// @ts-expect-error
state.musicInfo[key] = val
}
}
global.state_event.playerMusicInfoChanged({ ...state.musicInfo })
},
setIsPlay(isPlay: boolean) {
state.isPlay = isPlay
global.state_event.playStateChanged(isPlay)
},
setStatusText(statusText: string) {
state.statusText = statusText
global.state_event.playStateTextChanged(statusText)
},
setNowPlayTime(time: number) {
state.progress.nowPlayTime = time
state.progress.nowPlayTimeStr = formatPlayTime2(time)
state.progress.progress = state.progress.maxPlayTime ? time / state.progress.maxPlayTime : 0
global.state_event.playProgressChanged({ ...state.progress })
},
setMaxplayTime(time: number) {
state.progress.maxPlayTime = time
state.progress.maxPlayTimeStr = formatPlayTime2(time)
state.progress.progress = time ? state.progress.nowPlayTime / time : 0
global.state_event.playProgressChanged({ ...state.progress })
},
setProgress(currentTime: number, totalTime: number) {
state.progress.nowPlayTime = currentTime
state.progress.nowPlayTimeStr = formatPlayTime2(currentTime)
state.progress.maxPlayTime = totalTime
state.progress.maxPlayTimeStr = formatPlayTime2(totalTime)
state.progress.progress = totalTime ? state.progress.nowPlayTime / currentTime : 0
global.state_event.playProgressChanged({ ...state.progress })
},
addPlayedList(info: LX.Player.PlayMusicInfo) {
if (state.playedList.some(m => m.musicInfo.id == info.musicInfo.id)) return
state.playedList.push(info)
global.state_event.playPlayedListChanged({ ...state.playedList })
},
removePlayedList(index: number) {
state.playedList.splice(index, 1)
global.state_event.playPlayedListChanged({ ...state.playedList })
},
clearPlayedList() {
state.playedList = []
global.state_event.playPlayedListChanged({ ...state.playedList })
},
addTempPlayList(list: LX.Player.TempPlayListItem[]) {
const topList: Array<{ listId: string | null, musicInfo: LX.Music.MusicInfo | LX.Download.ListItem }> = []
const bottomList = list.filter(({ isTop, ...musicInfo }) => {
if (isTop) {
topList.push(musicInfo)
return false
}
return true
})
if (topList.length) arrUnshift(state.tempPlayList, topList.map(({ musicInfo, listId }) => ({ musicInfo, listId, isTempPlay: true })))
if (bottomList.length) arrPush(state.tempPlayList, bottomList.map(({ musicInfo, listId }) => ({ musicInfo, listId, isTempPlay: true })))
global.state_event.playTempPlayListChanged({ ...state.tempPlayList })
},
removeTempPlayList(index: number) {
state.tempPlayList.splice(index, 1)
global.state_event.playTempPlayListChanged({ ...state.tempPlayList })
},
clearTempPlayeList() {
state.tempPlayList = []
global.state_event.playTempPlayListChanged({ ...state.tempPlayList })
},
setLoadErrorPicUrl(url: string) {
state.loadErrorPicUrl = url
},
setLastLyric(lrc?: string) {
state.lastLyric = lrc
},
}