185 lines
4.8 KiB
JavaScript
185 lines
4.8 KiB
JavaScript
import { reactive, ref, shallowRef } from '@renderer/utils/vueTools'
|
|
import { getList } from '@renderer/core/share/utils'
|
|
|
|
export const musicInfo = window.musicInfo = reactive({
|
|
songmid: null,
|
|
img: null,
|
|
lrc: null,
|
|
tlrc: null,
|
|
lxlrc: null,
|
|
url: null,
|
|
name: '',
|
|
singer: '',
|
|
album: '',
|
|
})
|
|
const musicInfoKeys = Object.keys(musicInfo)
|
|
export const setMusicInfo = _musicInfo => {
|
|
for (const key of musicInfoKeys) {
|
|
if (_musicInfo[key] !== undefined) {
|
|
musicInfo[key] = _musicInfo[key]
|
|
}
|
|
}
|
|
}
|
|
|
|
export const musicInfoItem = shallowRef({})
|
|
export const setMusicInfoItem = musicInfo => {
|
|
musicInfoItem.value = musicInfo.key ? musicInfo.metadata.musicInfo : musicInfo
|
|
}
|
|
|
|
|
|
export const isPlay = ref(false)
|
|
export const setPlay = val => {
|
|
isPlay.value = val
|
|
}
|
|
|
|
export const status = ref('')
|
|
export const setStatus = val => {
|
|
status.value = val
|
|
}
|
|
|
|
|
|
export const statusText = ref('')
|
|
export const setStatusText = val => {
|
|
statusText.value = val
|
|
}
|
|
|
|
export const setAllStatus = val => {
|
|
status.value = val
|
|
statusText.value = val
|
|
}
|
|
|
|
|
|
export const isShowPlayerDetail = ref(false)
|
|
export const setShowPlayerDetail = val => {
|
|
isShowPlayerDetail.value = val
|
|
}
|
|
|
|
export const isShowPlayComment = ref(false)
|
|
export const setShowPlayComment = val => {
|
|
isShowPlayComment.value = val
|
|
}
|
|
|
|
export const isShowLrcSelectContent = ref(false)
|
|
export const setShowPlayLrcSelectContentLrc = val => {
|
|
isShowLrcSelectContent.value = val
|
|
}
|
|
|
|
|
|
export const playMusicInfo = reactive({
|
|
listId: null, // 当前播放歌曲的列表 id
|
|
musicInfo: null, // 当前播放歌曲的歌曲信息
|
|
isTempPlay: false, // 是否属于 “稍后播放”
|
|
})
|
|
export const playInfo = reactive({
|
|
playIndex: -1, // 当前正在播放歌曲 index
|
|
playListId: null, // 播放器的播放列表 id
|
|
listPlayIndex: -1, // 播放器播放歌曲 index
|
|
})
|
|
|
|
// 设置播放器的播放列表
|
|
export const setPlayList = listId => {
|
|
playInfo.playListId = listId
|
|
}
|
|
|
|
// 更新播放位置
|
|
export const updatePlayIndex = () => {
|
|
const indexInfo = getPlayIndex(playMusicInfo.listId, playMusicInfo.musicInfo, playMusicInfo.isTempPlay)
|
|
// console.log(indexInfo)
|
|
playInfo.playIndex = indexInfo.playIndex
|
|
playInfo.listPlayIndex = indexInfo.listPlayIndex
|
|
|
|
return indexInfo
|
|
}
|
|
|
|
export const getPlayIndex = (listId, musicInfo, isTempPlay) => {
|
|
const playerList = getList(playInfo.playListId)
|
|
|
|
// if (listIndex < 0) throw new Error('music info not found')
|
|
// playInfo.playIndex = listIndex
|
|
|
|
let playIndex = -1
|
|
let listPlayIndex = -1
|
|
if (playerList?.length) {
|
|
listPlayIndex = Math.min(playInfo.listPlayIndex, playerList.length - 1)
|
|
}
|
|
|
|
const list = getList(listId)
|
|
if (list?.length) {
|
|
if (musicInfo.key) { // 已下载的歌曲
|
|
const currentKey = musicInfo.key
|
|
playIndex = list.findIndex(m => m.key == currentKey)
|
|
} else {
|
|
const currentSongmid = musicInfo.songmid
|
|
playIndex = list.findIndex(m => m.songmid == currentSongmid)
|
|
}
|
|
if (!isTempPlay) {
|
|
if (playIndex < 0) {
|
|
listPlayIndex = listPlayIndex < 1 ? (list.length - 1) : (listPlayIndex - 1)
|
|
} else {
|
|
listPlayIndex = playIndex
|
|
}
|
|
}
|
|
}
|
|
|
|
return {
|
|
playIndex,
|
|
listPlayIndex,
|
|
}
|
|
}
|
|
|
|
// 设置当前播放歌曲的信息
|
|
export const setPlayMusicInfo = (listId, musicInfo, isTempPlay = false) => {
|
|
playMusicInfo.listId = listId
|
|
playMusicInfo.musicInfo = musicInfo
|
|
playMusicInfo.isTempPlay = isTempPlay
|
|
if (musicInfo == null) {
|
|
playInfo.playIndex = -1
|
|
playInfo.playListId = null
|
|
playInfo.listPlayIndex = -1
|
|
return
|
|
}
|
|
|
|
const { playIndex, listPlayIndex } = getPlayIndex(listId, musicInfo, isTempPlay)
|
|
|
|
playInfo.playIndex = playIndex
|
|
playInfo.listPlayIndex = listPlayIndex
|
|
|
|
setMusicInfoItem(musicInfo)
|
|
// console.log(playInfo)
|
|
}
|
|
|
|
export const playedList = window.playedList = reactive([])
|
|
export const addPlayedList = (item) => {
|
|
if (playedList.some(m => m.musicInfo === item.musicInfo)) return
|
|
playedList.push(item)
|
|
}
|
|
export const removePlayedList = (index) => {
|
|
playedList.splice(index, 1)
|
|
}
|
|
export const clearPlayedList = () => {
|
|
playedList.splice(0, playedList.length)
|
|
}
|
|
|
|
export const tempPlayList = reactive([])
|
|
export const addTempPlayList = (list) => {
|
|
const topList = []
|
|
const bottomList = list.filter(({ isTop, ...musicInfo }) => {
|
|
if (isTop) {
|
|
topList.push(musicInfo)
|
|
return false
|
|
}
|
|
return true
|
|
})
|
|
if (topList.length) tempPlayList.unshift(...topList.map(({ musicInfo, listId }) => ({ musicInfo, listId, isTempPlay: true })))
|
|
if (bottomList.length) tempPlayList.push(...bottomList.map(({ musicInfo, listId }) => ({ musicInfo, listId, isTempPlay: true })))
|
|
}
|
|
export const removeTempPlayList = (index) => {
|
|
tempPlayList.splice(index, 1)
|
|
}
|
|
export const clearTempPlayeList = () => {
|
|
tempPlayList.splice(0, tempPlayList.length)
|
|
}
|
|
|
|
window.playInfo = playInfo
|
|
window.playMusicInfo = playMusicInfo
|