Use default Archidekt preview image for decks without featured.

This commit is contained in:
Brübach, Lukas 2025-11-25 10:30:04 +01:00
parent 4787028d12
commit 223035f452
2 changed files with 22 additions and 3 deletions

View file

@ -13,6 +13,8 @@
#include <QPixmap> #include <QPixmap>
#include <QWidget> #include <QWidget>
#define ARCHIDEKT_DEFAULT_IMAGE "https://storage.googleapis.com/topdekt-user/images/archidekt_deck_card_shadow.jpg"
QString timeAgo(const QString &timestamp) QString timeAgo(const QString &timestamp)
{ {
QDateTime dt = QDateTime::fromString(timestamp, Qt::ISODate); QDateTime dt = QDateTime::fromString(timestamp, Qt::ISODate);
@ -78,8 +80,15 @@ ArchidektApiResponseDeckEntryDisplayWidget::ArchidektApiResponseDeckEntryDisplay
// Use preview->imageLabel for image loading // Use preview->imageLabel for image loading
picture = previewWidget->imageLabel; picture = previewWidget->imageLabel;
QNetworkRequest req(QUrl(response.getFeatured())); imageUrl = response.getFeatured().isEmpty() ? QUrl(ARCHIDEKT_DEFAULT_IMAGE) : QUrl(response.getFeatured());
imageNetworkManager->get(req);
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<void *>(this));
reply->setProperty("requestedUrl", imageUrl);
connect(imageNetworkManager, &QNetworkAccessManager::finished, this, connect(imageNetworkManager, &QNetworkAccessManager::finished, this,
&ArchidektApiResponseDeckEntryDisplayWidget::onPreviewImageLoadFinished); &ArchidektApiResponseDeckEntryDisplayWidget::onPreviewImageLoadFinished);
@ -134,7 +143,16 @@ void ArchidektApiResponseDeckEntryDisplayWidget::setScaleFactor(int scale)
void ArchidektApiResponseDeckEntryDisplayWidget::onPreviewImageLoadFinished(QNetworkReply *reply) void ArchidektApiResponseDeckEntryDisplayWidget::onPreviewImageLoadFinished(QNetworkReply *reply)
{ {
if (reply->url() != response.getFeatured()) { // Check if this is our reply
void *owner = reply->property("deckWidget").value<void *>();
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; return;
} }

View file

@ -36,6 +36,7 @@ protected:
private: private:
QVBoxLayout *layout; QVBoxLayout *layout;
ArchidektApiResponseDeckListingContainer response; ArchidektApiResponseDeckListingContainer response;
QUrl imageUrl;
QNetworkAccessManager *imageNetworkManager; QNetworkAccessManager *imageNetworkManager;
ArchidektDeckPreviewImageDisplayWidget *previewWidget; ArchidektDeckPreviewImageDisplayWidget *previewWidget;
QLabel *picture; QLabel *picture;