Banner cards should respect providerIds.

This commit is contained in:
Lukas Brübach 2025-01-08 05:27:21 +01:00
parent 30bafe6348
commit 1cf25e3c5f
4 changed files with 40 additions and 25 deletions

View file

@ -829,7 +829,7 @@ void TabDeckEditor::updateBannerCardComboBox()
bannerCardComboBox->clear(); bannerCardComboBox->clear();
// Prepare the new items with deduplication // Prepare the new items with deduplication
QSet<QString> bannerCardSet; QSet<QPair<QString, QString>> bannerCardSet;
InnerDecklistNode *listRoot = deckModel->getDeckList()->getRoot(); InnerDecklistNode *listRoot = deckModel->getDeckList()->getRoot();
for (int i = 0; i < listRoot->size(); i++) { for (int i = 0; i < listRoot->size(); i++) {
InnerDecklistNode *currentZone = dynamic_cast<InnerDecklistNode *>(listRoot->at(i)); InnerDecklistNode *currentZone = dynamic_cast<InnerDecklistNode *>(listRoot->at(i));
@ -839,23 +839,29 @@ void TabDeckEditor::updateBannerCardComboBox()
continue; continue;
for (int k = 0; k < currentCard->getNumber(); ++k) { for (int k = 0; k < currentCard->getNumber(); ++k) {
CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(currentCard->getName()); CardInfoPtr info = CardDatabaseManager::getInstance()->getCardByNameAndProviderId(
currentCard->getName(), currentCard->getCardProviderId());
if (info) { if (info) {
bannerCardSet.insert(currentCard->getName()); bannerCardSet.insert(QPair(currentCard->getName(), currentCard->getCardProviderId()));
} }
} }
} }
} }
// Convert the QSet to a sorted QStringList QList<QPair<QString, QString>> pairList = bannerCardSet.values();
QStringList bannerCardChoices;
for (const QString &entry : bannerCardSet) {
bannerCardChoices.append(entry);
}
bannerCardChoices.sort(Qt::CaseInsensitive);
// Populate the combo box with new items // Sort QList by the first() element of the QPair
bannerCardComboBox->addItems(bannerCardChoices); std::sort(pairList.begin(), pairList.end(), [](const QPair<QString, QString> &a, const QPair<QString, QString> &b) {
return a.first.toLower() < b.first.toLower();
});
for (const auto &pair : pairList) {
QVariantMap dataMap;
dataMap["name"] = pair.first;
dataMap["uuid"] = pair.second;
bannerCardComboBox->addItem(pair.first, dataMap);
}
// Try to restore the previous selection by finding the currentText // Try to restore the previous selection by finding the currentText
int restoredIndex = bannerCardComboBox->findText(currentText); int restoredIndex = bannerCardComboBox->findText(currentText);
@ -863,7 +869,7 @@ void TabDeckEditor::updateBannerCardComboBox()
bannerCardComboBox->setCurrentIndex(restoredIndex); bannerCardComboBox->setCurrentIndex(restoredIndex);
} else { } else {
// Add a placeholder "-" and set it as the current selection // Add a placeholder "-" and set it as the current selection
int bannerIndex = bannerCardComboBox->findText(deckModel->getDeckList()->getBannerCard()); int bannerIndex = bannerCardComboBox->findText(deckModel->getDeckList()->getBannerCard().first);
if (bannerIndex != -1) { if (bannerIndex != -1) {
bannerCardComboBox->setCurrentIndex(bannerIndex); bannerCardComboBox->setCurrentIndex(bannerIndex);
} else { } else {
@ -878,8 +884,9 @@ void TabDeckEditor::updateBannerCardComboBox()
void TabDeckEditor::setBannerCard(int /* changedIndex */) void TabDeckEditor::setBannerCard(int /* changedIndex */)
{ {
qDebug() << "Banner card was set to: " << bannerCardComboBox->currentText(); QVariantMap data = bannerCardComboBox->itemData(bannerCardComboBox->currentIndex()).toMap();
deckModel->getDeckList()->setBannerCard(bannerCardComboBox->currentText()); qDebug() << "Banner card is " << data["name"].toString() << " and " << data["uuid"].toString();
deckModel->getDeckList()->setBannerCard(QPair(data["name"].toString(), data["uuid"].toString()));
} }
void TabDeckEditor::updateCardInfo(CardInfoPtr _card) void TabDeckEditor::updateCardInfo(CardInfoPtr _card)
@ -1048,8 +1055,8 @@ void TabDeckEditor::openDeckFromFile(const QString &fileName, DeckOpenLocation d
if (l->loadFromFile(fileName, fmt, true)) { if (l->loadFromFile(fileName, fmt, true)) {
SettingsCache::instance().recents().updateRecentlyOpenedDeckPaths(fileName); SettingsCache::instance().recents().updateRecentlyOpenedDeckPaths(fileName);
updateBannerCardComboBox(); updateBannerCardComboBox();
if (!l->getBannerCard().isEmpty()) { if (!l->getBannerCard().first.isEmpty()) {
bannerCardComboBox->setCurrentIndex(bannerCardComboBox->findText(l->getBannerCard())); bannerCardComboBox->setCurrentIndex(bannerCardComboBox->findText(l->getBannerCard().first));
} }
if (deckOpenLocation == NEW_TAB) { if (deckOpenLocation == NEW_TAB) {
emit openDeckEditor(l); emit openDeckEditor(l);
@ -1544,13 +1551,13 @@ void TabDeckEditor::actDecrement()
void TabDeckEditor::setDeck(DeckLoader *_deck) void TabDeckEditor::setDeck(DeckLoader *_deck)
{ {
qDebug() << " ORIGINAL BANNER CARD " << _deck->getBannerCard(); qDebug() << " ORIGINAL BANNER CARD " << _deck->getBannerCard().first;
deckModel->setDeckList(_deck); deckModel->setDeckList(_deck);
nameEdit->setText(deckModel->getDeckList()->getName()); nameEdit->setText(deckModel->getDeckList()->getName());
commentsEdit->setText(deckModel->getDeckList()->getComments()); commentsEdit->setText(deckModel->getDeckList()->getComments());
qDebug() << deckModel->getDeckList()->getBannerCard() << " was the banner card"; qDebug() << deckModel->getDeckList()->getBannerCard() << " was the banner card";
bannerCardComboBox->setCurrentText(deckModel->getDeckList()->getBannerCard()); bannerCardComboBox->setCurrentText(deckModel->getDeckList()->getBannerCard().first);
updateBannerCardComboBox(); updateBannerCardComboBox();
updateHash(); updateHash();
deckModel->sort(deckView->header()->sortIndicatorSection(), deckView->header()->sortIndicatorOrder()); deckModel->sort(deckView->header()->sortIndicatorSection(), deckView->header()->sortIndicatorOrder());

View file

@ -14,9 +14,10 @@ DeckPreviewWidget::DeckPreviewWidget(QWidget *parent, const QString &_filePath)
deckLoader = new DeckLoader(); deckLoader = new DeckLoader();
deckLoader->loadFromFile(filePath, DeckLoader::CockatriceFormat); deckLoader->loadFromFile(filePath, DeckLoader::CockatriceFormat);
auto bannerCard = deckLoader->getBannerCard().isEmpty() auto bannerCard = deckLoader->getBannerCard().first.isEmpty()
? CardInfoPtr() ? CardInfoPtr()
: CardDatabaseManager::getInstance()->getCard(deckLoader->getBannerCard()); : CardDatabaseManager::getInstance()->getCardByNameAndProviderId(
deckLoader->getBannerCard().first, deckLoader->getBannerCard().second);
bannerCardDisplayWidget = new DeckPreviewCardPictureWidget(this); bannerCardDisplayWidget = new DeckPreviewCardPictureWidget(this);

View file

@ -427,7 +427,9 @@ bool DeckList::readElement(QXmlStreamReader *xml)
else if (childName == "comments") else if (childName == "comments")
comments = xml->readElementText(); comments = xml->readElementText();
else if (childName == "bannerCard") { else if (childName == "bannerCard") {
bannerCard = xml->readElementText(); QString providerId = xml->attributes().value("providerId").toString();
QString cardName = xml->readElementText();
bannerCard = QPair<QString, QString>(cardName, providerId);
} else if (childName == "zone") { } else if (childName == "zone") {
InnerDecklistNode *newZone = getZoneObjFromName(xml->attributes().value("name").toString()); InnerDecklistNode *newZone = getZoneObjFromName(xml->attributes().value("name").toString());
newZone->readElement(xml); newZone->readElement(xml);
@ -449,8 +451,11 @@ void DeckList::write(QXmlStreamWriter *xml)
xml->writeAttribute("version", "1"); xml->writeAttribute("version", "1");
xml->writeTextElement("lastLoadedTimestamp", lastLoadedTimestamp); xml->writeTextElement("lastLoadedTimestamp", lastLoadedTimestamp);
xml->writeTextElement("deckname", name); xml->writeTextElement("deckname", name);
xml->writeStartElement("bannerCard");
xml->writeAttribute("providerId", bannerCard.second);
xml->writeCharacters(bannerCard.first);
xml->writeEndElement();
xml->writeTextElement("comments", comments); xml->writeTextElement("comments", comments);
xml->writeTextElement("bannerCard", bannerCard);
for (int i = 0; i < root->size(); i++) for (int i = 0; i < root->size(); i++)
root->at(i)->writeElement(xml); root->at(i)->writeElement(xml);
@ -458,6 +463,7 @@ void DeckList::write(QXmlStreamWriter *xml)
QMapIterator<QString, SideboardPlan *> i(sideboardPlans); QMapIterator<QString, SideboardPlan *> i(sideboardPlans);
while (i.hasNext()) while (i.hasNext())
i.next().value()->write(xml); i.next().value()->write(xml);
xml->writeEndElement(); xml->writeEndElement();
} }

View file

@ -250,7 +250,8 @@ class DeckList : public QObject
{ {
Q_OBJECT Q_OBJECT
private: private:
QString name, comments, bannerCard; QString name, comments;
QPair<QString, QString> bannerCard;
QString deckHash; QString deckHash;
QString lastLoadedTimestamp; QString lastLoadedTimestamp;
QMap<QString, SideboardPlan *> sideboardPlans; QMap<QString, SideboardPlan *> sideboardPlans;
@ -280,7 +281,7 @@ public slots:
{ {
comments = _comments; comments = _comments;
} }
void setBannerCard(const QString &_bannerCard = QString()) void setBannerCard(const QPair<QString, QString> &_bannerCard = QPair<QString, QString>())
{ {
bannerCard = _bannerCard; bannerCard = _bannerCard;
} }
@ -302,7 +303,7 @@ public:
{ {
return comments; return comments;
} }
QString getBannerCard() const QPair<QString, QString> getBannerCard() const
{ {
return bannerCard; return bannerCard;
} }