diff --git a/src/renderer/worker/main/list.ts b/src/renderer/worker/main/list.ts index 92f12dc9..1218293f 100644 --- a/src/renderer/worker/main/list.ts +++ b/src/renderer/worker/main/list.ts @@ -79,65 +79,103 @@ const getIntv = (musicInfo: LX.Music.MusicInfo) => { * @param localeId 排序语言 * @returns */ -export const sortListMusicInfo = async(list: LX.Music.MusicInfo[], sortType: 'up' | 'down', fieldName: 'name' | 'singer' | 'albumName' | 'interval' | 'source', localeId: string) => { +export const sortListMusicInfo = async(list: LX.Music.MusicInfo[], sortType: 'up' | 'down' | 'disorder', fieldName: 'name' | 'singer' | 'albumName' | 'interval' | 'source', localeId: string) => { // console.log(sortType, fieldName, localeId) // const locale = new Intl.Locale(localeId) - if (sortType == 'up') { - if (fieldName == 'interval') { - list.sort((a, b) => { - if (a.interval == null) { - return b.interval == null ? 0 : -1 - } else return b.interval == null ? 1 : getIntv(a) - getIntv(b) - }) - } else { - switch (fieldName) { - case 'name': - case 'singer': - case 'source': - list.sort((a, b) => { - if (a[fieldName] == null) { - return b[fieldName] == null ? 0 : -1 - } else return b[fieldName] == null ? 1 : a[fieldName].localeCompare(b[fieldName], localeId) - }) - break - case 'albumName': - list.sort((a, b) => { - if (a.meta.albumName == null) { - return b.meta.albumName == null ? 0 : -1 - } else return b.meta.albumName == null ? 1 : a.meta.albumName.localeCompare(b.meta.albumName, localeId) - }) - break + if (sortType == 'disorder' && (fieldName =='name' || fieldName == 'singer' || fieldName =='albumName' || fieldName =='interval' || fieldName =='source')){ + + let change_num:number[]=[] + + for(let i:number = 0;i { - if (a.interval == null) { - return b.interval == null ? 0 : 1 - } else return b.interval == null ? -1 : getIntv(b) - getIntv(a) - }) - } else { - switch (fieldName) { - case 'name': - case 'singer': - case 'source': - list.sort((a, b) => { - if (a[fieldName] == null) { - return b[fieldName] == null ? 0 : 1 - } else return b[fieldName] == null ? -1 : b[fieldName].localeCompare(a[fieldName], localeId) - }) - break - case 'albumName': - list.sort((a, b) => { - if (a.meta.albumName == null) { - return b.meta.albumName == null ? 0 : 1 - } else return b.meta.albumName == null ? -1 : b.meta.albumName.localeCompare(a.meta.albumName, localeId) - }) - break + else{ + let sign:boolean = false + do{ + let r_num:number = Math.floor(Math.random()*list.length) + for(let j:number = 0 ; j { + if (a.interval == null) { + return b.interval == null ? 0 : -1 + } else return b.interval == null ? 1 : getIntv(a) - getIntv(b) + }) + } else { + switch (fieldName) { + case 'name': + case 'singer': + case 'source': + list.sort((a, b) => { + if (a[fieldName] == null) { + return b[fieldName] == null ? 0 : -1 + } else return b[fieldName] == null ? 1 : a[fieldName].localeCompare(b[fieldName], localeId) + }) + break + case 'albumName': + list.sort((a, b) => { + if (a.meta.albumName == null) { + return b.meta.albumName == null ? 0 : -1 + } else return b.meta.albumName == null ? 1 : a.meta.albumName.localeCompare(b.meta.albumName, localeId) + }) + break + } + } + } else { + if (fieldName == 'interval') { + list.sort((a, b) => { + if (a.interval == null) { + return b.interval == null ? 0 : 1 + } else return b.interval == null ? -1 : getIntv(b) - getIntv(a) + }) + } else { + switch (fieldName) { + case 'name': + case 'singer': + case 'source': + list.sort((a, b) => { + if (a[fieldName] == null) { + return b[fieldName] == null ? 0 : 1 + } else return b[fieldName] == null ? -1 : b[fieldName].localeCompare(a[fieldName], localeId) + }) + break + case 'albumName': + list.sort((a, b) => { + if (a.meta.albumName == null) { + return b.meta.albumName == null ? 0 : 1 + } else return b.meta.albumName == null ? -1 : b.meta.albumName.localeCompare(a.meta.albumName, localeId) + }) + break + } + } + } + return list + + } + } const variantRxp = /(\(|().+(\)|))/g