From 223035f452144d585a330732a2d9566628c04930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Br=C3=BCbach=2C=20Lukas?= Date: Tue, 25 Nov 2025 10:30:04 +0100 Subject: [PATCH] Use default Archidekt preview image for decks without featured. --- ...api_response_deck_entry_display_widget.cpp | 24 ++++++++++++++++--- ...t_api_response_deck_entry_display_widget.h | 1 + 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.cpp index 53e8d6879..bbeca5f1c 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.cpp @@ -13,6 +13,8 @@ #include #include +#define ARCHIDEKT_DEFAULT_IMAGE "https://storage.googleapis.com/topdekt-user/images/archidekt_deck_card_shadow.jpg" + QString timeAgo(const QString ×tamp) { QDateTime dt = QDateTime::fromString(timestamp, Qt::ISODate); @@ -78,8 +80,15 @@ ArchidektApiResponseDeckEntryDisplayWidget::ArchidektApiResponseDeckEntryDisplay // Use preview->imageLabel for image loading picture = previewWidget->imageLabel; - QNetworkRequest req(QUrl(response.getFeatured())); - imageNetworkManager->get(req); + imageUrl = response.getFeatured().isEmpty() ? QUrl(ARCHIDEKT_DEFAULT_IMAGE) : QUrl(response.getFeatured()); + + QNetworkRequest req(imageUrl); + QNetworkReply *reply = imageNetworkManager->get(req); + + // tag the reply with "this" so we know it belongs to us later + reply->setProperty("deckWidget", QVariant::fromValue(this)); + reply->setProperty("requestedUrl", imageUrl); + connect(imageNetworkManager, &QNetworkAccessManager::finished, this, &ArchidektApiResponseDeckEntryDisplayWidget::onPreviewImageLoadFinished); @@ -134,7 +143,16 @@ void ArchidektApiResponseDeckEntryDisplayWidget::setScaleFactor(int scale) void ArchidektApiResponseDeckEntryDisplayWidget::onPreviewImageLoadFinished(QNetworkReply *reply) { - if (reply->url() != response.getFeatured()) { + // Check if this is our reply + void *owner = reply->property("deckWidget").value(); + if (owner != this) { + return; // not our reply + } + + // Check that the requested URL matches what we asked + QUrl requestedUrl = reply->property("requestedUrl").toUrl(); + if (requestedUrl != imageUrl) { + reply->deleteLater(); return; } diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.h index 19d57fa84..76d9dd05c 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.h @@ -36,6 +36,7 @@ protected: private: QVBoxLayout *layout; ArchidektApiResponseDeckListingContainer response; + QUrl imageUrl; QNetworkAccessManager *imageNetworkManager; ArchidektDeckPreviewImageDisplayWidget *previewWidget; QLabel *picture;