Only overwrite card in deck if UUID _and_ Number missing

This commit is contained in:
ZeldaZach 2024-12-01 17:12:36 -05:00
parent 050c86cee6
commit 7d42a43c87
No known key found for this signature in database
4 changed files with 39 additions and 19 deletions

View file

@ -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<DecklistModelCardNode *>(typeNode->findCardChildByNameAndProviderId(cardName, providerId));
return dynamic_cast<DecklistModelCardNode *>(
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<DecklistModelCardNode *>(
cardTypeNode->findCardChildByNameAndProviderId(cardName, cardInfoSet.getProperty("uuid")));
auto *cardNode = dynamic_cast<DecklistModelCardNode *>(cardTypeNode->findCardChildByNameProviderIdAndNumber(
cardName, cardInfoSet.getProperty("uuid"), cardInfoSet.getProperty("num")));
const auto cardSetName = cardInfoSet.getPtr().isNull() ? "" : cardInfoSet.getPtr()->getCorrectedShortName();
if (!cardNode) {

View file

@ -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);

View file

@ -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;

View file

@ -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;