From 7d42a43c871993073008855395c9b5450bc87fd4 Mon Sep 17 00:00:00 2001 From: ZeldaZach Date: Sun, 1 Dec 2024 17:12:36 -0500 Subject: [PATCH] Only overwrite card in deck if UUID _and_ Number missing --- cockatrice/src/deck/deck_list_model.cpp | 22 ++++++++++++++-------- cockatrice/src/deck/deck_list_model.h | 17 ++++++++++++----- common/decklist.cpp | 15 ++++++++++----- common/decklist.h | 4 +++- 4 files changed, 39 insertions(+), 19 deletions(-) diff --git a/cockatrice/src/deck/deck_list_model.cpp b/cockatrice/src/deck/deck_list_model.cpp index 0a166dbcd..fefed4b3f 100644 --- a/cockatrice/src/deck/deck_list_model.cpp +++ b/cockatrice/src/deck/deck_list_model.cpp @@ -307,8 +307,10 @@ InnerDecklistNode *DeckListModel::createNodeIfNeeded(const QString &name, InnerD return newNode; } -DecklistModelCardNode * -DeckListModel::findCardNode(const QString &cardName, const QString &zoneName, const QString &providerId) const +DecklistModelCardNode *DeckListModel::findCardNode(const QString &cardName, + const QString &zoneName, + const QString &providerId, + const QString &cardNumber) const { InnerDecklistNode *zoneNode, *typeNode; CardInfoPtr info; @@ -330,14 +332,18 @@ DeckListModel::findCardNode(const QString &cardName, const QString &zoneName, co return nullptr; } - return dynamic_cast(typeNode->findCardChildByNameAndProviderId(cardName, providerId)); + return dynamic_cast( + typeNode->findCardChildByNameProviderIdAndNumber(cardName, providerId, cardNumber)); } -QModelIndex DeckListModel::findCard(const QString &cardName, const QString &zoneName, const QString &providerId) const +QModelIndex DeckListModel::findCard(const QString &cardName, + const QString &zoneName, + const QString &providerId, + const QString &cardNumber) const { DecklistModelCardNode *cardNode; - cardNode = findCardNode(cardName, zoneName, providerId); + cardNode = findCardNode(cardName, zoneName, providerId, cardNumber); if (!cardNode) { return {}; } @@ -352,7 +358,7 @@ QModelIndex DeckListModel::addPreferredPrintingCard(const QString &cardName, con } QModelIndex DeckListModel::addCard(const QString &cardName, - const CardInfoPerSet cardInfoSet, + const CardInfoPerSet &cardInfoSet, const QString &zoneName, bool abAddAnyway) { @@ -377,8 +383,8 @@ QModelIndex DeckListModel::addCard(const QString &cardName, InnerDecklistNode *cardTypeNode = createNodeIfNeeded(cardType, zoneNode); const QModelIndex parentIndex = nodeToIndex(cardTypeNode); - auto *cardNode = dynamic_cast( - cardTypeNode->findCardChildByNameAndProviderId(cardName, cardInfoSet.getProperty("uuid"))); + auto *cardNode = dynamic_cast(cardTypeNode->findCardChildByNameProviderIdAndNumber( + cardName, cardInfoSet.getProperty("uuid"), cardInfoSet.getProperty("num"))); const auto cardSetName = cardInfoSet.getPtr().isNull() ? "" : cardInfoSet.getPtr()->getCorrectedShortName(); if (!cardNode) { diff --git a/cockatrice/src/deck/deck_list_model.h b/cockatrice/src/deck/deck_list_model.h index 486ca799b..c7194a5da 100644 --- a/cockatrice/src/deck/deck_list_model.h +++ b/cockatrice/src/deck/deck_list_model.h @@ -94,10 +94,15 @@ public: Qt::ItemFlags flags(const QModelIndex &index) const override; bool setData(const QModelIndex &index, const QVariant &value, int role) override; bool removeRows(int row, int count, const QModelIndex &parent) override; - QModelIndex findCard(const QString &cardName, const QString &zoneName, const QString &providerId = "") const; + QModelIndex findCard(const QString &cardName, + const QString &zoneName, + const QString &providerId = "", + const QString &cardNumber = "") const; QModelIndex addPreferredPrintingCard(const QString &cardName, const QString &zoneName, bool abAddAnyway); - QModelIndex - addCard(const ::QString &cardName, CardInfoPerSet cardInfoSet, const QString &zoneName, bool abAddAnyway = false); + QModelIndex addCard(const ::QString &cardName, + const CardInfoPerSet &cardInfoSet, + const QString &zoneName, + bool abAddAnyway = false); void sort(int column, Qt::SortOrder order) override; void cleanList(); DeckLoader *getDeckList() const @@ -113,8 +118,10 @@ private: Qt::SortOrder lastKnownOrder; InnerDecklistNode *createNodeIfNeeded(const QString &name, InnerDecklistNode *parent); QModelIndex nodeToIndex(AbstractDecklistNode *node) const; - DecklistModelCardNode * - findCardNode(const QString &cardName, const QString &zoneName, const QString &providerId = "") const; + DecklistModelCardNode *findCardNode(const QString &cardName, + const QString &zoneName, + const QString &providerId = "", + const QString &cardNumber = "") const; void emitRecursiveUpdates(const QModelIndex &index); void sortHelper(InnerDecklistNode *node, Qt::SortOrder order); diff --git a/common/decklist.cpp b/common/decklist.cpp index b269d43f0..08b98a730 100644 --- a/common/decklist.cpp +++ b/common/decklist.cpp @@ -156,12 +156,17 @@ AbstractDecklistNode *InnerDecklistNode::findChild(const QString &_name) return nullptr; } -AbstractDecklistNode *InnerDecklistNode::findCardChildByNameAndProviderId(const QString &_name, - const QString &_providerId) +AbstractDecklistNode *InnerDecklistNode::findCardChildByNameProviderIdAndNumber(const QString &_name, + const QString &_providerId, + const QString &_cardNumber) { - for (int i = 0; i < size(); i++) { - if (at(i) != nullptr && at(i)->getName() == _name && at(i)->getCardProviderId() == _providerId) { - return at(i); + for (const auto &i : *this) { + if (i != nullptr && i->getName() == _name) { + if (i->getCardCollectorNumber() == _cardNumber) { + if (i->getCardProviderId() == _providerId) { + return i; + } + } } } return nullptr; diff --git a/common/decklist.h b/common/decklist.h index 02b3a537d..87596a884 100644 --- a/common/decklist.h +++ b/common/decklist.h @@ -136,7 +136,9 @@ public: void clearTree(); AbstractDecklistNode *findChild(const QString &_name); - AbstractDecklistNode *findCardChildByNameAndProviderId(const QString &_name, const QString &_providerId); + AbstractDecklistNode *findCardChildByNameProviderIdAndNumber(const QString &_name, + const QString &_providerId, + const QString &_cardNumber = ""); int height() const override; int recursiveCount(bool countTotalCards = false) const; bool compare(AbstractDecklistNode *other) const override;