lx-music-desktop/src/renderer/core/player/utils.ts

66 lines
2.3 KiB
TypeScript

import { toRaw, markRawList } from '@common/utils/vueTools'
// import { qualityList } from '@renderer/store'
import { clearPlayedList } from '@renderer/store/player/action'
import { appSetting } from '@renderer/store/setting'
import { dislikeInfo } from '@renderer/store/dislikeList'
import { setPowerSaveBlocker as setPowerSaveBlockerRemote } from '@renderer/utils/ipc'
// export const getPlayType = (highQuality: boolean, musicInfo: LX.Music.MusicInfo | LX.Download.ListItem): LX.Quality | null => {
// if ('progress' in musicInfo || musicInfo.source == 'local') return null
// let type: LX.Quality = '128k'
// let list = qualityList.value[musicInfo.source]
// if (highQuality && musicInfo.meta._qualitys['320k'] && list?.includes('320k')) type = '320k'
// return type
// }
/**
* 过滤列表中已播放的歌曲
*/
export const filterList = async({ playedList, listId, list, playerMusicInfo, isNext }: {
playedList: LX.Player.PlayMusicInfo[]
listId: string
list: Array<LX.Music.MusicInfo | LX.Download.ListItem>
playerMusicInfo?: LX.Music.MusicInfo | LX.Download.ListItem
isNext: boolean
}) => {
// if (this.list.listName === null) return
// console.log(isCheckFile)
let { filteredList, canPlayList, playerIndex } = await window.lx.worker.main.filterMusicList({
listId,
list: list.map(m => toRaw(m)),
playedList: toRaw(playedList),
savePath: appSetting['download.savePath'],
playerMusicInfo: toRaw(playerMusicInfo),
dislikeInfo: { names: toRaw(dislikeInfo.names), musicNames: toRaw(dislikeInfo.musicNames), singerNames: toRaw(dislikeInfo.singerNames) },
isNext,
})
if (!filteredList.length && playedList.length) {
clearPlayedList()
return { filteredList: markRawList(canPlayList), playerIndex }
}
return { filteredList: markRawList(filteredList), playerIndex }
}
let timeout: NodeJS.Timer | null = null
const clearTimer = () => {
if (!timeout) return
clearTimeout(timeout)
timeout = null
}
export const setPowerSaveBlocker = (enabled: boolean, force = false) => {
if (enabled) {
clearTimer()
if (!force && !appSetting['player.powerSaveBlocker']) return
setPowerSaveBlockerRemote(true)
} else if (force) {
clearTimer()
setPowerSaveBlockerRemote(false)
} else {
if (timeout) return
timeout = setTimeout(() => {
setPowerSaveBlockerRemote(false)
}, 60_000 * 1.5)
}
}