From fb557d2b14a05959f62a37aa709d9c629eb8b620 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Br=C3=BCbach=2C=20Lukas?= Date: Thu, 27 Nov 2025 11:10:18 +0100 Subject: [PATCH] Debounce and limit searches. --- .../widgets/tabs/api/archidekt/tab_archidekt.cpp | 11 +++++++++++ .../widgets/tabs/api/archidekt/tab_archidekt.h | 3 +++ 2 files changed, 14 insertions(+) diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.cpp index 407740a97..71ba7a3be 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.cpp @@ -39,6 +39,12 @@ TabArchidekt::TabArchidekt(TabSupervisor *_tabSupervisor) : Tab(_tabSupervisor) networkManager->setRedirectPolicy(QNetworkRequest::ManualRedirectPolicy); connect(networkManager, SIGNAL(finished(QNetworkReply *)), this, SLOT(processApiJson(QNetworkReply *))); + searchDebounceTimer = new QTimer(this); + searchDebounceTimer->setSingleShot(true); // We only want it to fire once after inactivity + searchDebounceTimer->setInterval(300); // 300ms debounce + + connect(searchDebounceTimer, &QTimer::timeout, this, [this]() { doSearchImmediate(); }); + container = new QWidget(this); mainLayout = new QVBoxLayout(container); mainLayout->setContentsMargins(0, 0, 0, 0); @@ -417,6 +423,11 @@ QString TabArchidekt::buildSearchUrl() } void TabArchidekt::doSearch() +{ + searchDebounceTimer->start(); +} + +void TabArchidekt::doSearchImmediate() { QString url = buildSearchUrl(); QNetworkRequest req{QUrl(url)}; diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.h index be6a5ef66..e66e2f4fd 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.h @@ -73,6 +73,7 @@ public: * Updates the current page display with results asynchronously. */ void doSearch(); + void doSearchImmediate(); /** * @brief Retrieve the tab display text @@ -149,6 +150,8 @@ public slots: void getTopDecks(); private: + QTimer* searchDebounceTimer; ///< Timer to debounce search requests by spin-boxes etc. + // --------------------------------------------------------------------- // Layout Containers // ---------------------------------------------------------------------