From 3cf8d5eb4937c47b29e2ff5ee9f40c4e168767d1 Mon Sep 17 00:00:00 2001 From: lizzie Date: Tue, 8 Sep 2026 17:45:30 +0000 Subject: [PATCH] 2026-09-08 17:45:30 Signed-off-by: lizzie --- src/yuzu/game/common.h | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/yuzu/game/common.h b/src/yuzu/game/common.h index 03505d6313..063733e8d8 100644 --- a/src/yuzu/game/common.h +++ b/src/yuzu/game/common.h @@ -12,25 +12,29 @@ namespace Yuzu { inline bool ContainsAllWords(const QString& haystack, const QString& userinput) { const QStringList userinput_split = userinput.split(QLatin1Char{' '}, Qt::SkipEmptyParts); - return std::all_of(userinput_split.begin(), userinput_split.end(), - [&haystack](const QString& s) { return haystack.contains(s); }); + return std::all_of(userinput_split.begin(), userinput_split.end(), [&haystack](const QString& s) { + return haystack.contains(s); + }); } inline bool FilterMatches(const QString& filter, const QStandardItem* item) { if (filter.isEmpty()) return true; + auto const sluggify = [](const QString& s) { + QString o(s.normalized(QString::NormalizationForm_D).toLower()); + return o.replace(QRegularExpression(QStringLiteral("[^a-z\\s]")), QStringLiteral("")); + }; + + const auto norm_filter = sluggify(filter); const auto program_id = item->data(GameListItemPath::ProgramIdRole).toULongLong(); - - const QString file_path = item->data(GameListItemPath::FullPathRole).toString().toLower(); - const QString file_title = item->data(GameListItemPath::TitleRole).toString().toLower(); + const QString file_path = sluggify(item->data(GameListItemPath::FullPathRole).toString()); + const QString file_title = sluggify(item->data(GameListItemPath::TitleRole).toString()); const QString file_program_id = QStringLiteral("%1").arg(program_id, 16, 16, QLatin1Char{'0'}); - - const QString file_name = - file_path.mid(file_path.lastIndexOf(QLatin1Char{'/'}) + 1) + QLatin1Char{' '} + file_title; - - return Yuzu::ContainsAllWords(file_name, filter) || - (file_program_id.size() == 16 && file_program_id.contains(filter)); + const QString file_name = sluggify(file_path.mid(file_path.lastIndexOf(QLatin1Char{'/'}) + 1) + QLatin1Char{' '} + file_title); + return (ContainsAllWords(file_name, norm_filter) + || ContainsAllWords(file_title, norm_filter)) + || (file_program_id.size() == 16 && file_program_id.contains(norm_filter)); } } // namespace Yuzu