From 494a634ccfa9cbcca8e9b4d01949fb92a45ffc89 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Wed, 30 Jul 2025 14:20:55 -0300 Subject: search: sort albums, tracks by "group rank" --- src/common-util/search-spec.js | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) (limited to 'src/common-util') 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(); } -- cgit 1.3.0-6-gf8a5