[Filters] Pass CardSearchLanguage as a single struct

This commit is contained in:
Lukas Brübach 2026-09-21 00:09:44 +02:00
parent 2191ce9c75
commit 0967644640
18 changed files with 187 additions and 196 deletions

View file

@ -68,8 +68,8 @@ void CardSearchModel::updateSearchResults(const QString &query)
// The completer suggestions match against the same languages the card
// search uses, so typing a localized name finds the card.
QString matchName = card->getName();
if (searchLanguageMode != SearchLanguageMode::English && !searchLanguage.isEmpty() && searchLanguage != "en") {
matchName = card->getLocalizedName(searchLanguage);
if (searchLanguage.mode != SearchLanguageMode::English && !searchLanguage.isEnglishOnly()) {
matchName = card->getLocalizedName(searchLanguage.language);
}
const QString lowerName = matchName.toLower();
if (!lowerName.contains(lowerQuery)) {
@ -88,9 +88,9 @@ void CardSearchModel::updateSearchResults(const QString &query)
auto sortByDistanceThenLength = [this](const SearchResult &a, const SearchResult &b) {
QString nameA = a.card->getName();
QString nameB = b.card->getName();
if (searchLanguageMode != SearchLanguageMode::English && !searchLanguage.isEmpty() && searchLanguage != "en") {
nameA = a.card->getLocalizedName(searchLanguage);
nameB = b.card->getLocalizedName(searchLanguage);
if (searchLanguage.mode != SearchLanguageMode::English && !searchLanguage.isEnglishOnly()) {
nameA = a.card->getLocalizedName(searchLanguage.language);
nameB = b.card->getLocalizedName(searchLanguage.language);
}
if (a.distance != b.distance) {
return a.distance < b.distance;
@ -112,4 +112,4 @@ void CardSearchModel::updateSearchResults(const QString &query)
}
endResetModel();
}
}

View file

@ -27,13 +27,12 @@ public:
void updateSearchResults(const QString &query); // Update results based on input
void setSearchLanguage(const QString &searchLang, SearchLanguageMode mode)
void setSearchLanguage(const CardSearchLanguage &searchLang)
{
if (searchLanguage == searchLang && searchLanguageMode == mode) {
if (searchLanguage == searchLang) {
return;
}
searchLanguage = searchLang;
searchLanguageMode = mode;
}
private:
@ -45,8 +44,7 @@ private:
CardDatabaseDisplayModel *sourceModel;
QList<SearchResult> searchResults;
QString searchLanguage;
SearchLanguageMode searchLanguageMode = SearchLanguageMode::English;
CardSearchLanguage searchLanguage;
};
#endif // CARD_SEARCH_MODEL_H
#endif // CARD_SEARCH_MODEL_H

View file

@ -179,7 +179,7 @@ bool CardDatabaseDisplayModel::filterAcceptsRow(int sourceRow, const QModelIndex
}
if (filterString != nullptr) {
if (filterTree != nullptr && !filterTree->acceptsCard(info, searchLanguage, searchLanguageMode)) {
if (filterTree != nullptr && !filterTree->acceptsCard(info, searchLanguage)) {
return false;
}
return filterString->check(info);
@ -190,10 +190,14 @@ bool CardDatabaseDisplayModel::filterAcceptsRow(int sourceRow, const QModelIndex
bool CardDatabaseDisplayModel::rowMatchesCardName(CardInfoPtr info) const
{
if (!cardName.isEmpty() && !info->getName().contains(cardName, Qt::CaseInsensitive) &&
searchLanguageMode != SearchLanguageMode::English && !searchLanguage.isEmpty() && searchLanguage != "en" &&
!info->getLocalizedName(searchLanguage).contains(cardName, Qt::CaseInsensitive)) {
return false;
if (!cardName.isEmpty()) {
const bool matchesEnglish = info->getName().contains(cardName, Qt::CaseInsensitive);
const bool matchesLocalized =
!searchLanguage.isEnglishOnly() &&
info->getLocalizedName(searchLanguage.language).contains(cardName, Qt::CaseInsensitive);
if (!matchesEnglish && !matchesLocalized) {
return false;
}
}
if (!cardNameSet.isEmpty() && !cardNameSet.contains(info->getName())) {
@ -201,7 +205,7 @@ bool CardDatabaseDisplayModel::rowMatchesCardName(CardInfoPtr info) const
}
if (filterTree != nullptr) {
return filterTree->acceptsCard(info, searchLanguage, searchLanguageMode);
return filterTree->acceptsCard(info, searchLanguage);
}
return true;
@ -241,18 +245,17 @@ void CardDatabaseDisplayModel::setStringFilter(const QString &_src)
{
searchText = _src;
delete filterString;
filterString = new FilterString(_src, searchLanguage, searchLanguageMode);
filterString = new FilterString(_src, searchLanguage);
dirty();
}
void CardDatabaseDisplayModel::setSearchLanguage(const QString &searchLang, SearchLanguageMode mode)
void CardDatabaseDisplayModel::setSearchLanguage(const CardSearchLanguage &searchLang)
{
if (searchLanguage == searchLang && searchLanguageMode == mode) {
if (searchLanguage == searchLang) {
return;
}
searchLanguage = searchLang;
searchLanguageMode = mode;
if (filterString != nullptr) {
setStringFilter(searchText);

View file

@ -33,8 +33,7 @@ private:
FilterString *filterString;
int loadedRowCount;
QTimer dirtyTimer;
QString searchLanguage;
SearchLanguageMode searchLanguageMode = SearchLanguageMode::English;
CardSearchLanguage searchLanguage;
QString searchText;
/** The translation table that will be used for sanitizeCardName. */
@ -65,7 +64,7 @@ public:
cardNameSet = _cardNameSet;
dirty();
}
void setSearchLanguage(const QString &searchLang, SearchLanguageMode mode);
void setSearchLanguage(const CardSearchLanguage &searchLang);
void dirty()
{