[Card] Add a setting for the language used in card search

Localized card names and texts can now be searched too, controlled by a
'Language used in card search' toggle (English, selected card language, or
both) on the general settings page. Untranslated cards always keep matching
in English.

Removed the redundant local copy of the URL templates list in the localized
picture loader while here.
This commit is contained in:
Lukas Brübach 2026-09-18 11:38:45 +02:00
parent 1c93309952
commit e029173e29
20 changed files with 360 additions and 52 deletions

View file

@ -179,7 +179,7 @@ bool CardDatabaseDisplayModel::filterAcceptsRow(int sourceRow, const QModelIndex
}
if (filterString != nullptr) {
if (filterTree != nullptr && !filterTree->acceptsCard(info)) {
if (filterTree != nullptr && !filterTree->acceptsCard(info, searchLanguage, searchLanguageMode)) {
return false;
}
return filterString->check(info);
@ -190,7 +190,9 @@ bool CardDatabaseDisplayModel::filterAcceptsRow(int sourceRow, const QModelIndex
bool CardDatabaseDisplayModel::rowMatchesCardName(CardInfoPtr info) const
{
if (!cardName.isEmpty() && !info->getName().contains(cardName, Qt::CaseInsensitive)) {
if (!cardName.isEmpty() && !info->getName().contains(cardName, Qt::CaseInsensitive) &&
searchLanguageMode != CardSearchLanguage::English && !searchLanguage.isEmpty() && searchLanguage != "en" &&
!info->getLocalizedName(searchLanguage).contains(cardName, Qt::CaseInsensitive)) {
return false;
}
@ -199,7 +201,7 @@ bool CardDatabaseDisplayModel::rowMatchesCardName(CardInfoPtr info) const
}
if (filterTree != nullptr) {
return filterTree->acceptsCard(info);
return filterTree->acceptsCard(info, searchLanguage, searchLanguageMode);
}
return true;
@ -235,6 +237,29 @@ void CardDatabaseDisplayModel::setFilterTree(FilterTree *_filterTree)
invalidate();
}
void CardDatabaseDisplayModel::setStringFilter(const QString &_src)
{
delete filterString;
filterString = new FilterString(_src);
filterString->setSearchLanguage(searchLanguage, searchLanguageMode);
dirty();
}
void CardDatabaseDisplayModel::setSearchLanguage(const QString &searchLang, CardSearchLanguage mode)
{
if (searchLanguage == searchLang && searchLanguageMode == mode) {
return;
}
searchLanguage = searchLang;
searchLanguageMode = mode;
if (filterString != nullptr) {
filterString->setSearchLanguage(searchLanguage, searchLanguageMode);
}
dirty();
}
void CardDatabaseDisplayModel::filterTreeChanged()
{
invalidate();