Browse Source

Ignore asshole characters when sorting skins

kiwec 2 months ago
parent
commit
d26da1df68
2 changed files with 22 additions and 0 deletions
  1. 1 0
      src/App/Osu/Changelog.cpp
  2. 21 0
      src/App/Osu/OptionsMenu.cpp

+ 1 - 0
src/App/Osu/Changelog.cpp

@@ -36,6 +36,7 @@ Changelog::Changelog() : ScreenBackable() {
     latest.changes.push_back("- Chat: added support for multiplayer invite links");
     latest.changes.push_back("- FPS counter will now display worst frametime instead of current frametime");
     latest.changes.push_back("- Improved song browser performance");
+    latest.changes.push_back("- Skins are now sorted alphabetically, ignoring meme characters");
     changelogs.push_back(latest);
 
     CHANGELOG v35_05;

+ 21 - 0
src/App/Osu/OptionsMenu.cpp

@@ -2405,6 +2405,27 @@ void OptionsMenu::onSkinSelect() {
     skinFolder.append(convar->getConVarByName("osu_folder_sub_skins")->getString());
     std::vector<std::string> skinFolders = env->getFoldersInFolder(skinFolder.toUtf8());
 
+    // Sort skins only by alphanum characters, ignore the others
+    std::sort(skinFolders.begin(), skinFolders.end(), [](std::string a, std::string b) {
+        int i = 0;
+        int j = 0;
+        while(i < a.length() && j < b.length()) {
+            if(!isalnum(a[i])) {
+                i++;
+                continue;
+            }
+            if(!isalnum(b[j])) {
+                j++;
+                continue;
+            }
+            char la = tolower(a[i]);
+            char lb = tolower(b[j]);
+            if(la != lb) return la < lb;
+        }
+
+        return false;
+    });
+
     if(skinFolders.size() > 0) {
         m_contextMenu->setPos(m_skinSelectLocalButton->getPos());
         m_contextMenu->setRelPos(m_skinSelectLocalButton->getRelPos());