@@ -243,9 +243,24 @@ export const filterDuplicateMusic = async(list: LX.Music.MusicInfo[], isFilterVa
243243}
244244
245245export const searchListMusic = ( list : LX . Music . MusicInfo [ ] , text : string ) => {
246+ const fullMathNameResults = new Set < LX . Music . MusicInfo > ( )
247+ const fullMathSingerResults = new Set < LX . Music . MusicInfo > ( )
248+ const fullMathAlbumResults = new Set < LX . Music . MusicInfo > ( )
249+ const textLower = text . toLowerCase ( )
250+ for ( const mInfo of list ) {
251+ if ( mInfo . name ?. toLowerCase ( ) . includes ( textLower ) ) {
252+ fullMathNameResults . add ( mInfo )
253+ } else if ( mInfo . singer ?. toLowerCase ( ) . includes ( textLower ) ) {
254+ fullMathSingerResults . add ( mInfo )
255+ } else if ( mInfo . meta . albumName ?. toLowerCase ( ) . includes ( textLower ) ) {
256+ fullMathAlbumResults . add ( mInfo )
257+ }
258+ }
246259 let result : LX . Music . MusicInfo [ ] = [ ]
247260 let rxp = new RegExp ( text . split ( '' ) . map ( s => s . replace ( / [ . * + ? ^ $ { } ( ) | [ \] \\ ] / , '\\$&' ) ) . join ( '.*' ) + '.*' , 'i' )
248261 for ( const mInfo of list ) {
262+ if ( fullMathNameResults . has ( mInfo ) || fullMathSingerResults . has ( mInfo ) || fullMathAlbumResults . has ( mInfo ) ) continue
263+
249264 const str = `${ mInfo . name } ${ mInfo . singer } ${ mInfo . meta . albumName ? mInfo . meta . albumName : '' } `
250265 if ( rxp . test ( str ) ) result . push ( mInfo )
251266 }
@@ -258,7 +273,12 @@ export const searchListMusic = (list: LX.Music.MusicInfo[], text: string) => {
258273 data : mInfo ,
259274 } )
260275 }
261- return sortedList . map ( item => item . data ) . reverse ( )
276+ return [
277+ ...fullMathNameResults . values ( ) ,
278+ ...fullMathSingerResults . values ( ) ,
279+ ...fullMathAlbumResults . values ( ) ,
280+ ...sortedList . map ( item => item . data ) . reverse ( ) ,
281+ ]
262282}
263283
264284/**
0 commit comments