新增“不喜欢歌曲”功能&新增“收藏歌曲”、“取消收藏”、“不喜欢该歌曲”快捷键设置

This commit is contained in:
lyswhut
2023-09-04 14:13:47 +08:00
parent 3ca8f09971
commit baf69e397a
40 changed files with 861 additions and 26 deletions
+83
View File
@@ -0,0 +1,83 @@
import { markRaw } from '@common/utils/vueTools'
import { dislikeInfo } from './state'
import { SPLIT_CHAR } from '@common/constants'
export const hasDislike = (info: LX.Music.MusicInfo) => {
const name = info.name?.replaceAll(SPLIT_CHAR.DISLIKE_NAME, SPLIT_CHAR.DISLIKE_NAME_ALIAS).toLocaleLowerCase().trim() ?? ''
const singer = info.singer?.replaceAll(SPLIT_CHAR.DISLIKE_NAME, SPLIT_CHAR.DISLIKE_NAME_ALIAS).toLocaleLowerCase().trim() ?? ''
return dislikeInfo.musicNames.has(name) || dislikeInfo.singerNames.has(singer) ||
dislikeInfo.names.has(`${name}${SPLIT_CHAR.DISLIKE_NAME}${singer}`)
}
export const initDislikeInfo = ({ musicNames, rules, names, singerNames }: LX.Dislike.DislikeInfo) => {
dislikeInfo.names = markRaw(names)
dislikeInfo.singerNames = markRaw(singerNames)
dislikeInfo.musicNames = markRaw(musicNames)
dislikeInfo.rules = rules
}
const initNameSet = () => {
dislikeInfo.names.clear()
dislikeInfo.musicNames.clear()
dislikeInfo.singerNames.clear()
const list: string[] = []
for (const item of dislikeInfo.rules.split('\n')) {
if (!item) continue
let [name, singer] = item.split(SPLIT_CHAR.DISLIKE_NAME)
if (name) {
name = name.replaceAll(SPLIT_CHAR.DISLIKE_NAME, SPLIT_CHAR.DISLIKE_NAME_ALIAS).toLocaleLowerCase().trim()
if (singer) {
singer = singer.replaceAll(SPLIT_CHAR.DISLIKE_NAME, SPLIT_CHAR.DISLIKE_NAME_ALIAS).toLocaleLowerCase().trim()
const rule = `${name}${SPLIT_CHAR.DISLIKE_NAME}${singer}`
dislikeInfo.names.add(rule)
list.push(rule)
} else {
dislikeInfo.musicNames.add(name)
list.push(name)
}
} else if (singer) {
singer = singer.replaceAll(SPLIT_CHAR.DISLIKE_NAME, SPLIT_CHAR.DISLIKE_NAME_ALIAS).toLocaleLowerCase().trim()
dislikeInfo.singerNames.add(singer)
list.push(`${SPLIT_CHAR.DISLIKE_NAME}${singer}`)
}
}
dislikeInfo.rules = list.join('\n') + '\n'
}
export const addDislikeInfo = (infos: LX.Dislike.DislikeMusicInfo[]) => {
dislikeInfo.rules += '\n' + infos.map(info => `${info.name ?? ''}${SPLIT_CHAR.DISLIKE_NAME}${info.singer ?? ''}`).join('\n')
initNameSet()
return dislikeInfo.rules
}
export const overwirteDislikeInfo = (rules: string) => {
dislikeInfo.rules = rules
initNameSet()
return dislikeInfo.rules
}
// export const updateDislikeInfo = (info: LX.Dislike.ListItem) => {
// const targetInfo = dislikeInfo.list.find(i => i.id == info.id)
// if (!targetInfo) return
// targetInfo.name = info.name
// targetInfo.singer = info.singer
// initNameSet()
// }
// export const removeDislikeInfo = (ids: string[]) => {
// for (const id of ids) {
// dislikeInfo.list.splice(dislikeInfo.list.findIndex(info => info.id == id), 1)
// }
// initNameSet()
// }
// export const clearDislikeInfo = () => {
// dislikeInfo.rules = ''
// initNameSet()
// }
+3
View File
@@ -0,0 +1,3 @@
export * as action from './action'
export * from './state'
+11
View File
@@ -0,0 +1,11 @@
import { markRaw } from '@common/utils/vueTools'
// import { deduplicationList } from '@common/utils/renderer'
export const dislikeInfo: LX.Dislike.DislikeInfo = markRaw({
names: markRaw(new Set()),
musicNames: markRaw(new Set()),
singerNames: markRaw(new Set()),
rules: '',
})
+1 -1
View File
@@ -73,7 +73,7 @@ export const setPlayListId = (listId: string | null) => {
playInfo.playerListId = listId
}
export const getList = (listId: string | null): LX.Music.MusicInfo[] | LX.Download.ListItem[] => {
export const getList = (listId: string | null): Array<LX.Music.MusicInfo | LX.Download.ListItem> => {
return listId == LIST_IDS.DOWNLOAD ? downloadList : getListMusicsFromCache(listId)
}