新增“不喜欢歌曲”功能&新增“收藏歌曲”、“取消收藏”、“不喜欢该歌曲”快捷键设置
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
// import type Database from 'better-sqlite3'
|
||||
import { getDB } from '../../db'
|
||||
import {
|
||||
createQueryStatement,
|
||||
createInsertStatement,
|
||||
// createDeleteStatement,
|
||||
// createUpdateStatement,
|
||||
createClearStatement,
|
||||
} from './statements'
|
||||
|
||||
/**
|
||||
* 查询不喜欢歌曲列表
|
||||
*/
|
||||
export const queryDislikeList = () => {
|
||||
const queryStatement = createQueryStatement()
|
||||
return queryStatement.all() as LX.DBService.DislikeInfo[]
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量插入不喜欢歌曲并刷新顺序
|
||||
* @param infos 列表
|
||||
*/
|
||||
export const inertDislikeList = async(infos: LX.DBService.DislikeInfo[]) => {
|
||||
const db = getDB()
|
||||
const insertStatement = createInsertStatement()
|
||||
db.transaction((infos: LX.DBService.DislikeInfo[]) => {
|
||||
for (const info of infos) insertStatement.run(info)
|
||||
})(infos)
|
||||
}
|
||||
|
||||
/**
|
||||
* 覆盖并批量插入不喜欢歌曲并刷新顺序
|
||||
* @param infos 列表
|
||||
*/
|
||||
export const overwirteDislikeList = async(infos: LX.DBService.DislikeInfo[]) => {
|
||||
const db = getDB()
|
||||
const clearStatement = createClearStatement()
|
||||
const insertStatement = createInsertStatement()
|
||||
db.transaction((infos: LX.DBService.DislikeInfo[]) => {
|
||||
clearStatement.run()
|
||||
for (const info of infos) insertStatement.run(info)
|
||||
})(infos)
|
||||
}
|
||||
|
||||
// /**
|
||||
// * 批量删除不喜欢歌曲
|
||||
// * @param ids 列表
|
||||
// */
|
||||
// export const deleteDislikeList = (ids: string[]) => {
|
||||
// const db = getDB()
|
||||
// const deleteStatement = createDeleteStatement()
|
||||
// db.transaction((ids: string[]) => {
|
||||
// for (const id of ids) deleteStatement.run(BigInt(id))
|
||||
// })(ids)
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * 批量更新不喜欢歌曲
|
||||
// * @param urlInfo 列表
|
||||
// */
|
||||
// export const updateDislikeList = async(infos: LX.DBService.DislikeInfo[]) => {
|
||||
// const db = getDB()
|
||||
// const updateStatement = createUpdateStatement()
|
||||
// db.transaction((infos: LX.DBService.DislikeInfo[]) => {
|
||||
// for (const info of infos) updateStatement.run(info)
|
||||
// })(infos)
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * 清空不喜欢歌曲列表
|
||||
// */
|
||||
// export const clearDislikeList = () => {
|
||||
// const clearStatement = createClearStatement()
|
||||
// clearStatement.run()
|
||||
// }
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
import { SPLIT_CHAR } from '@common/constants'
|
||||
import {
|
||||
queryDislikeList,
|
||||
inertDislikeList,
|
||||
overwirteDislikeList,
|
||||
// updateDislikeList,
|
||||
// deleteDislikeList,
|
||||
// clearDislikeList,
|
||||
} from './dbHelper'
|
||||
|
||||
// let dislikeInfo: LX.Dislike.DislikeInfo
|
||||
|
||||
const toDBDislikeInfo = (musicInfos: string[]): LX.DBService.DislikeInfo[] => {
|
||||
const list: LX.DBService.DislikeInfo[] = []
|
||||
for (const item of musicInfos) {
|
||||
if (!item.trim()) continue
|
||||
list.push({
|
||||
content: item,
|
||||
})
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
const initDislikeList = () => {
|
||||
const dislikeInfo: LX.Dislike.DislikeInfo = {
|
||||
// musicIds: new Set<string>(),
|
||||
names: new Set<string>(),
|
||||
singerNames: new Set<string>(),
|
||||
musicNames: new Set<string>(),
|
||||
rules: '',
|
||||
}
|
||||
const list: string[] = []
|
||||
for (const item of queryDislikeList()) {
|
||||
if (!item) continue
|
||||
let [name, singer] = item.content.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'
|
||||
|
||||
return dislikeInfo
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取不喜欢列表信息
|
||||
* @returns 不喜欢列表信息
|
||||
*/
|
||||
export const getDislikeListInfo = (): LX.Dislike.DislikeInfo => {
|
||||
// if (!dislikeInfo) initDislikeList()
|
||||
return initDislikeList()
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 添加信息
|
||||
* @param lists 列表信息
|
||||
*/
|
||||
export const dislikeInfoAdd = async(lists: LX.Dislike.DislikeMusicInfo[]) => {
|
||||
await inertDislikeList(lists.map(info => ({ content: `${info.name}${SPLIT_CHAR.DISLIKE_NAME}${info.singer}` })))
|
||||
}
|
||||
|
||||
/**
|
||||
* 覆盖列表信息
|
||||
* @param rules 规则信息
|
||||
*/
|
||||
export const dislikeInfoOverwrite = async(rules: string) => {
|
||||
await overwirteDislikeList(toDBDislikeInfo(rules.split('\n')))
|
||||
}
|
||||
|
||||
|
||||
// /**
|
||||
// * 删除不喜欢列表
|
||||
// * @param ids 歌曲id
|
||||
// */
|
||||
// export const dislikeInfoRemove = (ids: string[]) => {
|
||||
// deleteDislikeList(ids)
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * 清空不喜欢列表
|
||||
// */
|
||||
// export const dislikeInfoClear = () => {
|
||||
// clearDislikeList()
|
||||
// }
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
import { getDB } from '../../db'
|
||||
|
||||
/**
|
||||
* 创建不喜欢列表查询语句
|
||||
* @returns 查询语句
|
||||
*/
|
||||
export const createQueryStatement = () => {
|
||||
const db = getDB()
|
||||
return db.prepare<[]>(`
|
||||
SELECT "content"
|
||||
FROM dislike_list
|
||||
WHERE "type"='music'
|
||||
`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建不喜欢记录插入语句
|
||||
* @returns 插入语句
|
||||
*/
|
||||
export const createInsertStatement = () => {
|
||||
const db = getDB()
|
||||
return db.prepare<[LX.DBService.DislikeInfo]>(`
|
||||
INSERT INTO "main"."dislike_list" ("type", "content")
|
||||
VALUES ('music', @content)`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建不喜欢记录清空语句
|
||||
* @returns 清空语句
|
||||
*/
|
||||
export const createClearStatement = () => {
|
||||
const db = getDB()
|
||||
return db.prepare<[]>(`
|
||||
DELETE FROM "main"."dislike_list"
|
||||
`)
|
||||
}
|
||||
|
||||
// /**
|
||||
// * 创建不喜欢记录删除语句
|
||||
// * @returns 删除语句
|
||||
// */
|
||||
// export const createDeleteStatement = () => {
|
||||
// const db = getDB()
|
||||
// return db.prepare<[bigint]>(`
|
||||
// DELETE FROM "main"."dislike_list"
|
||||
// WHERE "id"=?
|
||||
// `)
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * 创建不喜欢记录更新语句
|
||||
// * @returns 更新语句
|
||||
// */
|
||||
// export const createUpdateStatement = () => {
|
||||
// const db = getDB()
|
||||
// return db.prepare<[LX.DBService.DislikeInfo]>(`
|
||||
// UPDATE "main"."dislike_list"
|
||||
// SET "name"=@name, "singer"=@singer
|
||||
// WHERE "id"=@id
|
||||
// `)
|
||||
// }
|
||||
|
||||
@@ -4,3 +4,4 @@ export * as lyric from './lyric'
|
||||
export * as music_url from './music_url'
|
||||
export * as music_other_source from './music_other_source'
|
||||
export * as download from './download'
|
||||
export * as dislike_list from './dislike_list'
|
||||
|
||||
Reference in New Issue
Block a user