From 97c433915f629f6b458f589044d2c825c857e258 Mon Sep 17 00:00:00 2001 From: Szymon Flakus Date: Tue, 16 Sep 2025 20:01:50 +0200 Subject: [PATCH 1/2] add sorting by song author --- src/Sorters/SortMethods.cpp | 48 ++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/src/Sorters/SortMethods.cpp b/src/Sorters/SortMethods.cpp index f5b7bb5..fb2eee0 100644 --- a/src/Sorters/SortMethods.cpp +++ b/src/Sorters/SortMethods.cpp @@ -43,6 +43,35 @@ namespace BetterSongList { } ); + static ComparableFunctionSorterWithLegend alphabeticalSongAuthorName( + [](auto a, auto b) -> int { + std::string authorA = toLowercase( + std::string(a->songAuthorName).empty() + ? (a->allMappers.size() > 0 ? static_cast(a->allMappers[0]) : "") + : static_cast(a->songAuthorName) + ); + std::string authorB = toLowercase( + std::string(b->songAuthorName).empty() + ? (b->allMappers.size() > 0 ? static_cast(b->allMappers[0]) : "") + : static_cast(b->songAuthorName) + ); + + if (authorA == authorB) { + return toLowercase(a->songName) < toLowercase(b->songName); + } + + return authorA < authorB; + }, + [](GlobalNamespace::BeatmapLevel* song) -> std::string { + std::string author = toLowercase( + std::string(song->songAuthorName).empty() + ? (song->allMappers.size() > 0 ? static_cast(song->allMappers[0]) : "") + : static_cast(song->songAuthorName) + ); + return author.size() > 0 ? author.substr(0, 1) : ""; + } + ); + static PrimitiveFunctionSorterWithLegend bpm( [](auto song){ return song->beatsPerMinute; @@ -152,14 +181,15 @@ namespace BetterSongList { } std::map SortMethods::methods{ - {"Song Name", &alphabeticalSongname}, - {"Mapper Name", &alphabeticalMapper}, - {"Download Date", &downloadTime}, + {"Song Name", &alphabeticalSongname}, + {"Song Author Name", &alphabeticalSongAuthorName}, + {"Mapper Name", &alphabeticalMapper}, + {"Download Date", &downloadTime}, {"BL Stars", &blstars}, - {"SS Stars", &stars}, - {"Song Length", &songLength}, - {"BPM", &bpm}, - {"BeatSaver Date", &beatSaverDate}, - {"Default", nullptr} + {"SS Stars", &stars}, + {"Song Length", &songLength}, + {"BPM", &bpm}, + {"BeatSaver Date", &beatSaverDate}, + {"Default", nullptr} }; -} \ No newline at end of file +} From 6235b29ba4fecc7314c7c745e44237dfb731ae0f Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 20 Sep 2025 23:15:04 +0400 Subject: [PATCH 2/2] Optimize labels --- src/Sorters/SortMethods.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/Sorters/SortMethods.cpp b/src/Sorters/SortMethods.cpp index fb2eee0..a34476b 100644 --- a/src/Sorters/SortMethods.cpp +++ b/src/Sorters/SortMethods.cpp @@ -38,8 +38,8 @@ namespace BetterSongList { return toLowercase(a->songName) < toLowercase(b->songName); }, [](GlobalNamespace::BeatmapLevel* song) -> std::string { - std::string songName = toLowercase(song->songName); - return songName.size() > 0 ? songName.substr(0, 1) : ""; + std::string songName = song->songName; + return songName.size() > 0 ? toLowercase(songName.substr(0, 1)) : ""; } ); @@ -63,12 +63,21 @@ namespace BetterSongList { return authorA < authorB; }, [](GlobalNamespace::BeatmapLevel* song) -> std::string { - std::string author = toLowercase( - std::string(song->songAuthorName).empty() - ? (song->allMappers.size() > 0 ? static_cast(song->allMappers[0]) : "") - : static_cast(song->songAuthorName) - ); - return author.size() > 0 ? author.substr(0, 1) : ""; + std::string authorString = song->songAuthorName; + + if (authorString.empty()) { + if (song->allMappers.size() > 0) { + authorString = static_cast(song->allMappers[0]); + } else { + return ""; + } + } + + if (authorString.empty()) { + return ""; + } + + return toLowercase(authorString.substr(0, 1)); } ); @@ -87,7 +96,7 @@ namespace BetterSongList { }, [](auto song) -> std::string { std::string levelAuthor{static_cast(song->allMappers.size() > 0 ? song->allMappers[0] : "")}; - return levelAuthor.size() > 0 ? levelAuthor.substr(0, 1) : ""; + return levelAuthor.size() > 0 ? toLowercase(levelAuthor.substr(0, 1)) : ""; } );