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() // }