From 61231ab99e9d71635e6fee9677c4fe5480f42257 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Tue, 31 Mar 2026 18:11:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=A2=9E=E5=BC=BA=E6=AD=8C=E6=9B=B2?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 4 ++++ src/renderer/worker/main/list.ts | 22 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index 5e01ad3f..bd33b349 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,6 +1,10 @@ 我们很高兴地宣布新项目 Any Listen 的桌面版已发布,目前已支持列表跟随本地文件自动更新、加载并播放WebDAV上的歌曲等功能,更多功能仍在积极开发中,桌面版与Web版将同步更新。 对于有播放本地音乐或播放服务器上音乐需求的人可以试试,若遇到任何问题可以发 issue 反馈。 +### 优化 + +- 优化歌单内歌曲搜索结果排序 (#2734) + ### 修复 - 修复桌面歌词的 鼠标移入歌词区域时提高透明度 设置不稳定的问题(#2679, @Little100) diff --git a/src/renderer/worker/main/list.ts b/src/renderer/worker/main/list.ts index 4776c455..ce685fcf 100644 --- a/src/renderer/worker/main/list.ts +++ b/src/renderer/worker/main/list.ts @@ -243,9 +243,24 @@ export const filterDuplicateMusic = async(list: LX.Music.MusicInfo[], isFilterVa } export const searchListMusic = (list: LX.Music.MusicInfo[], text: string) => { + const fullMathNameResults = new Set() + const fullMathSingerResults = new Set() + const fullMathAlbumResults = new Set() + const textLower = text.toLowerCase() + for (const mInfo of list) { + if (mInfo.name?.toLowerCase().includes(textLower)) { + fullMathNameResults.add(mInfo) + } else if (mInfo.singer?.toLowerCase().includes(textLower)) { + fullMathSingerResults.add(mInfo) + } else if (mInfo.meta.albumName?.toLowerCase().includes(textLower)) { + fullMathAlbumResults.add(mInfo) + } + } let result: LX.Music.MusicInfo[] = [] let rxp = new RegExp(text.split('').map(s => s.replace(/[.*+?^${}()|[\]\\]/, '\\$&')).join('.*') + '.*', 'i') for (const mInfo of list) { + if (fullMathNameResults.has(mInfo) || fullMathSingerResults.has(mInfo) || fullMathAlbumResults.has(mInfo)) continue + const str = `${mInfo.name}${mInfo.singer}${mInfo.meta.albumName ? mInfo.meta.albumName : ''}` if (rxp.test(str)) result.push(mInfo) } @@ -258,7 +273,12 @@ export const searchListMusic = (list: LX.Music.MusicInfo[], text: string) => { data: mInfo, }) } - return sortedList.map(item => item.data).reverse() + return [ + ...fullMathNameResults.values(), + ...fullMathSingerResults.values(), + ...fullMathAlbumResults.values(), + ...sortedList.map(item => item.data).reverse(), + ] } /**