新增“不喜欢歌曲”功能&新增“收藏歌曲”、“取消收藏”、“不喜欢该歌曲”快捷键设置
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
// import { toRaw } from '@common/utils/vueTools'
|
||||
import { action } from '@renderer/store/dislikeList'
|
||||
import {
|
||||
getDislikeListInfo,
|
||||
addDislikeInfo as addDislikeInfoRemote,
|
||||
overwirteDislikeInfo as overwirteDislikeInfoRemote,
|
||||
// updateDislikeInfo as updateDislikeInfoRemote,
|
||||
// removeDislikeInfo as removeDislikeInfoRemote,
|
||||
// clearDislikeInfo as clearDislikeInfoRemote,
|
||||
} from '@renderer/utils/ipc'
|
||||
|
||||
|
||||
export const initDislikeInfo = async() => {
|
||||
action.initDislikeInfo(await getDislikeListInfo())
|
||||
}
|
||||
|
||||
export const addDislikeInfo = async(infos: LX.Dislike.DislikeMusicInfo[]) => {
|
||||
await addDislikeInfoRemote(infos)
|
||||
return action.addDislikeInfo(infos)
|
||||
}
|
||||
|
||||
export const overwirteDislikeInfo = async(rules: string) => {
|
||||
await overwirteDislikeInfoRemote(rules)
|
||||
return action.overwirteDislikeInfo(rules)
|
||||
}
|
||||
|
||||
// export const updateDislikeInfo = async(info: LX.Dislike.ListItem) => {
|
||||
// await updateDislikeInfoRemote([toRaw(info)])
|
||||
// action.updateDislikeInfo(info)
|
||||
// }
|
||||
|
||||
// export const removeDislikeInfo = async(ids: string[]) => {
|
||||
// await removeDislikeInfoRemote(toRaw(ids))
|
||||
// action.removeDislikeInfo(ids)
|
||||
// }
|
||||
|
||||
|
||||
// export const clearDislikeInfo = async() => {
|
||||
// await clearDislikeInfoRemote()
|
||||
// action.clearDislikeInfo()
|
||||
// }
|
||||
|
||||
|
||||
export const hasDislike = (info: LX.Music.MusicInfo | null) => {
|
||||
if (!info) return false
|
||||
return action.hasDislike(info)
|
||||
}
|
||||
|
||||
@@ -299,6 +299,7 @@ export const playNext = async(isAutoToggle = false): Promise<void> => {
|
||||
list: currentList,
|
||||
playedList,
|
||||
playerMusicInfo: currentList[playInfo.playerPlayIndex],
|
||||
isNext: true,
|
||||
})
|
||||
|
||||
if (!filteredList.length) {
|
||||
@@ -398,6 +399,7 @@ export const playPrev = async(isAutoToggle = false): Promise<void> => {
|
||||
list: currentList,
|
||||
playedList,
|
||||
playerMusicInfo: currentList[playInfo.playerPlayIndex],
|
||||
isNext: false,
|
||||
})
|
||||
if (!filteredList.length) {
|
||||
handleToggleStop()
|
||||
|
||||
@@ -2,6 +2,7 @@ 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'
|
||||
|
||||
export const getPlayType = (highQuality: boolean, musicInfo: LX.Music.MusicInfo | LX.Download.ListItem): LX.Quality | null => {
|
||||
if ('progress' in musicInfo || musicInfo.source == 'local') return null
|
||||
@@ -14,11 +15,12 @@ export const getPlayType = (highQuality: boolean, musicInfo: LX.Music.MusicInfo
|
||||
/**
|
||||
* 过滤列表中已播放的歌曲
|
||||
*/
|
||||
export const filterList = async({ playedList, listId, list, playerMusicInfo }: {
|
||||
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)
|
||||
@@ -28,6 +30,8 @@ export const filterList = async({ playedList, listId, list, playerMusicInfo }: {
|
||||
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) {
|
||||
|
||||
@@ -9,6 +9,7 @@ import { play, playList } from '@renderer/core/player'
|
||||
import { onBeforeUnmount } from '@common/utils/vueTools'
|
||||
import { appSetting } from '@renderer/store/setting'
|
||||
import { playMusicInfo } from '@renderer/store/player/state'
|
||||
import { initDislikeInfo } from '@renderer/core/dislikeList'
|
||||
|
||||
const initPrevPlayInfo = async() => {
|
||||
const info = await getPlayInfo()
|
||||
@@ -48,6 +49,7 @@ export default () => {
|
||||
window.app_event.myListUpdate(ids)
|
||||
})
|
||||
window.lxData.userLists = await getUserLists() // 获取用户列表
|
||||
await initDislikeInfo() // 获取不喜欢列表
|
||||
await initPrevPlayInfo().catch(err => {
|
||||
log.error(err)
|
||||
}) // 初始化上次的歌曲播放信息
|
||||
|
||||
@@ -32,6 +32,9 @@ 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 () => {
|
||||
@@ -90,6 +93,23 @@ export default () => {
|
||||
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 }])
|
||||
if (!playMusicInfo.isTempPlay) {
|
||||
playNext(true)
|
||||
}
|
||||
}
|
||||
|
||||
watch(() => appSetting['player.togglePlayMethod'], newValue => {
|
||||
// setLoopPlay(newValue == 'singleLoop')
|
||||
if (playedList.length) clearPlayedList()
|
||||
@@ -102,6 +122,9 @@ export default () => {
|
||||
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)
|
||||
@@ -119,6 +142,10 @@ export default () => {
|
||||
// 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)
|
||||
|
||||
Reference in New Issue
Block a user