diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-07-30 14:20:55 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-07-30 14:20:55 -0300 |
commit | 494a634ccfa9cbcca8e9b4d01949fb92a45ffc89 (patch) | |
tree | 713bfeb2bc763c931918db79a0dba4dfd296575d | |
parent | 9349febb44ff1fc935845a26dda494dcb43b43ff (diff) |
search: sort albums, tracks by "group rank"
-rw-r--r-- | src/common-util/search-spec.js | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/common-util/search-spec.js b/src/common-util/search-spec.js index 5ff18ac2..c6e9291a 100644 --- a/src/common-util/search-spec.js +++ b/src/common-util/search-spec.js @@ -73,8 +73,29 @@ const baselineStore = [ ]; function genericQuery(wikiData) { + const groupOrder = + wikiData.wikiInfo.divideTrackListsByGroups; + + const getGroupRank = thing => { + const relevantRanks = + Array.from(groupOrder.entries()) + .filter(({1: group}) => thing.groups.includes(group)) + .map(({0: index}) => index); + + if (relevantRanks.length === 0) { + return Infinity; + } else if (relevantRanks.length === 1) { + return relevantRanks[0]; + } else { + return relevantRanks[0] + 0.5; + } + } + + const sortByGroupRank = things => + things.sort((a, b) => getGroupRank(a) - getGroupRank(b)); + return [ - wikiData.albumData, + sortByGroupRank(wikiData.albumData.slice()), wikiData.artTagData, @@ -85,10 +106,9 @@ function genericQuery(wikiData) { wikiData.groupData, - wikiData.trackData - // Exclude rereleases - there's no reasonable way to differentiate - // them from the main release as part of this query. - .filter(track => !track.mainReleaseTrack), + sortByGroupRank( + wikiData.trackData + .filter(track => !track.mainReleaseTrack)), ].flat(); } |