From 7495d2dc65acd3ef6e43c9303f88d29a8f3cdaa3 Mon Sep 17 00:00:00 2001
From: RickyRister <42636155+RickyRister@users.noreply.github.com>
Date: Thu, 12 Jun 2025 16:32:24 -0700
Subject: [PATCH] [VDS] Use display name for generic search expression (#5976)
---
cockatrice/resources/help/deck_search.md | 6 +++---
.../deck_preview/deck_preview_widget.cpp | 12 ++++++++++--
.../deck_preview/deck_preview_widget.h | 1 +
cockatrice/src/game/filters/deck_filter_string.cpp | 4 ++--
4 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/cockatrice/resources/help/deck_search.md b/cockatrice/resources/help/deck_search.md
index cb06a40a6..e2fa4fe37 100644
--- a/cockatrice/resources/help/deck_search.md
+++ b/cockatrice/resources/help/deck_search.md
@@ -4,9 +4,9 @@ The search bar recognizes a set of special commands.
In this list of examples below, each entry has an explanation and can be clicked to test the query. Note that all
searches are case insensitive.
-- Filename:
-- [red deck wins](#red deck wins) (Any deck filename containing the words red, deck, and wins)
-- ["red deck wins"](#%22red deck wins%22) (Any deck filename containing the exact phrase "red deck wins")
+- Display Name (The deck name, or the filename if the deck name isn't set):
+- [red deck wins](#red deck wins) (Any deck with a display name containing the words red, deck, and wins)
+- ["red deck wins"](#%22red deck wins%22) (Any deck with a display name containing the exact phrase "red deck wins")
- Deck Contents (Uses [card search expressions](#cardSearchSyntaxHelp)):
- [[plains]] (Any deck that contains at least one card with "plains" in its name)
diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp
index 7fc5c729f..cce08ef8f 100644
--- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp
+++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp
@@ -182,6 +182,15 @@ QString DeckPreviewWidget::getColorIdentity()
return colorIdentity;
}
+/**
+ * The display name is given by the deck name, or the filename if the deck name is not set.
+ */
+QString DeckPreviewWidget::getDisplayName() const
+{
+ return deckLoader->getName().isEmpty() ? QFileInfo(deckLoader->getLastFileName()).fileName()
+ : deckLoader->getName();
+}
+
void DeckPreviewWidget::setFilePath(const QString &_filePath)
{
filePath = _filePath;
@@ -193,8 +202,7 @@ void DeckPreviewWidget::setFilePath(const QString &_filePath)
*/
void DeckPreviewWidget::refreshBannerCardText()
{
- bannerCardDisplayWidget->setOverlayText(
- deckLoader->getName().isEmpty() ? QFileInfo(deckLoader->getLastFileName()).fileName() : deckLoader->getName());
+ bannerCardDisplayWidget->setOverlayText(getDisplayName());
refreshBannerCardToolTip();
}
diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h
index 7c0ff1ad4..c6c6d377d 100644
--- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h
+++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h
@@ -27,6 +27,7 @@ public:
const QString &_filePath);
void retranslateUi();
QString getColorIdentity();
+ QString getDisplayName() const;
VisualDeckStorageWidget *visualDeckStorageWidget;
QVBoxLayout *layout;
diff --git a/cockatrice/src/game/filters/deck_filter_string.cpp b/cockatrice/src/game/filters/deck_filter_string.cpp
index 52aa15c71..13c39910d 100644
--- a/cockatrice/src/game/filters/deck_filter_string.cpp
+++ b/cockatrice/src/game/filters/deck_filter_string.cpp
@@ -131,8 +131,8 @@ static void setupParserRules()
search["GenericQuery"] = [](const peg::SemanticValues &sv) -> DeckFilter {
auto name = std::any_cast(sv[0]);
- return [=](const DeckPreviewWidget *, const ExtraDeckSearchInfo &info) {
- return info.fileSearchName.contains(name, Qt::CaseInsensitive);
+ return [=](const DeckPreviewWidget *deck, const ExtraDeckSearchInfo &) {
+ return deck->getDisplayName().contains(name, Qt::CaseInsensitive);
};
};
}