diff --git a/cockatrice/src/client/network/parsers/interface_json_deck_parser.h b/cockatrice/src/client/network/parsers/interface_json_deck_parser.h index 77d76c643..5de25dec0 100644 --- a/cockatrice/src/client/network/parsers/interface_json_deck_parser.h +++ b/cockatrice/src/client/network/parsers/interface_json_deck_parser.h @@ -100,7 +100,7 @@ public: QString collectorNumber = cardData.value("cn").toString(); QString providerId = cardData.value("scryfall_id").toString(); - list->setBannerCard(QPair(commanderName, providerId)); + list->setBannerCard({commanderName, providerId}); list->addCard(commanderName, DECK_ZONE_MAIN, -1, setName, collectorNumber, providerId); } } diff --git a/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp b/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp index 38a89fd02..850bff86d 100644 --- a/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp +++ b/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp @@ -161,8 +161,7 @@ void AbstractTabDeckEditor::openDeck(DeckLoader *deck) void AbstractTabDeckEditor::setDeck(DeckLoader *_deck) { deckDockWidget->setDeck(_deck); - PictureLoader::cacheCardPixmaps( - CardDatabaseManager::getInstance()->getCardsByNameAndProviderId(getDeckList()->getCardListWithProviderId())); + PictureLoader::cacheCardPixmaps(CardDatabaseManager::getInstance()->getCards(getDeckList()->getCardRefList())); setModified(false); // If they load a deck, make the deck list appear diff --git a/cockatrice/src/client/tabs/api/edhrec/display/cards/edhrec_api_response_card_details_display_widget.cpp b/cockatrice/src/client/tabs/api/edhrec/display/cards/edhrec_api_response_card_details_display_widget.cpp index 674f011cd..952599170 100644 --- a/cockatrice/src/client/tabs/api/edhrec/display/cards/edhrec_api_response_card_details_display_widget.cpp +++ b/cockatrice/src/client/tabs/api/edhrec/display/cards/edhrec_api_response_card_details_display_widget.cpp @@ -12,7 +12,7 @@ EdhrecApiResponseCardDetailsDisplayWidget::EdhrecApiResponseCardDetailsDisplayWi setLayout(layout); cardPictureWidget = new CardInfoPictureWidget(this); - cardPictureWidget->setCard(CardDatabaseManager::getInstance()->guessCard(toDisplay.sanitized)); + cardPictureWidget->setCard(CardDatabaseManager::getInstance()->guessCard({toDisplay.sanitized})); nameLabel = new QLabel(this); nameLabel->setText(toDisplay.name); diff --git a/cockatrice/src/client/tabs/api/edhrec/display/commander/edhrec_api_response_commander_details_display_widget.cpp b/cockatrice/src/client/tabs/api/edhrec/display/commander/edhrec_api_response_commander_details_display_widget.cpp index 2001cf6d1..6dbb25ac6 100644 --- a/cockatrice/src/client/tabs/api/edhrec/display/commander/edhrec_api_response_commander_details_display_widget.cpp +++ b/cockatrice/src/client/tabs/api/edhrec/display/commander/edhrec_api_response_commander_details_display_widget.cpp @@ -15,7 +15,7 @@ EdhrecCommanderResponseCommanderDetailsDisplayWidget::EdhrecCommanderResponseCom setLayout(layout); commanderPicture = new CardInfoPictureWidget(this); - commanderPicture->setCard(CardDatabaseManager::getInstance()->getCard(commanderDetails.getName())); + commanderPicture->setCard(CardDatabaseManager::getInstance()->getCardInfo(commanderDetails.getName())); QWidget *currentParent = parentWidget(); TabEdhRecMain *parentTab = nullptr; diff --git a/cockatrice/src/client/tabs/api/edhrec/tab_edhrec_main.cpp b/cockatrice/src/client/tabs/api/edhrec/tab_edhrec_main.cpp index 2eed749af..1b1e90acb 100644 --- a/cockatrice/src/client/tabs/api/edhrec/tab_edhrec_main.cpp +++ b/cockatrice/src/client/tabs/api/edhrec/tab_edhrec_main.cpp @@ -136,7 +136,7 @@ void TabEdhRecMain::retranslateUi() void TabEdhRecMain::doSearch() { - CardInfoPtr searchedCard = CardDatabaseManager::getInstance()->getCard(searchBar->text()); + CardInfoPtr searchedCard = CardDatabaseManager::getInstance()->getCardInfo(searchBar->text()); if (!searchedCard) { return; } diff --git a/cockatrice/src/client/tabs/tab.cpp b/cockatrice/src/client/tabs/tab.cpp index d31b86bc9..dcc1ae0c2 100644 --- a/cockatrice/src/client/tabs/tab.cpp +++ b/cockatrice/src/client/tabs/tab.cpp @@ -14,14 +14,13 @@ Tab::Tab(TabSupervisor *_tabSupervisor) setAttribute(Qt::WA_DeleteOnClose); } -void Tab::showCardInfoPopup(const QPoint &pos, const QString &cardName, const QString &providerId) +void Tab::showCardInfoPopup(const QPoint &pos, const CardRef &cardRef) { if (infoPopup) { infoPopup->deleteLater(); } - currentCardName = cardName; - currentProviderId = providerId; - infoPopup = new CardInfoDisplayWidget(cardName, providerId, nullptr, + currentCard = cardRef; + infoPopup = new CardInfoDisplayWidget(currentCard, nullptr, Qt::Widget | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint | Qt::WindowStaysOnTopHint); infoPopup->setAttribute(Qt::WA_TransparentForMouseEvents); @@ -37,7 +36,7 @@ void Tab::showCardInfoPopup(const QPoint &pos, const QString &cardName, const QS void Tab::deleteCardInfoPopup(const QString &cardName) { if (infoPopup) { - if ((currentCardName == cardName) || (cardName == "_")) { + if (currentCard.name == cardName || cardName == "_") { infoPopup->deleteLater(); infoPopup = 0; } diff --git a/cockatrice/src/client/tabs/tab.h b/cockatrice/src/client/tabs/tab.h index f82f9a7b2..68a1882a7 100644 --- a/cockatrice/src/client/tabs/tab.h +++ b/cockatrice/src/client/tabs/tab.h @@ -1,6 +1,8 @@ #ifndef TAB_H #define TAB_H +#include "card_ref.h" + #include class QMenu; @@ -27,12 +29,12 @@ protected: tabMenus.append(menu); } protected slots: - void showCardInfoPopup(const QPoint &pos, const QString &cardName, const QString &providerId); + void showCardInfoPopup(const QPoint &pos, const CardRef &cardRef); void deleteCardInfoPopup(const QString &cardName); void closeEvent(QCloseEvent *event) override; private: - QString currentCardName, currentProviderId; + CardRef currentCard; bool contentsChanged; CardInfoDisplayWidget *infoPopup; QList tabMenus; diff --git a/cockatrice/src/client/tabs/tab_game.cpp b/cockatrice/src/client/tabs/tab_game.cpp index 40c25067c..43cab8e8a 100644 --- a/cockatrice/src/client/tabs/tab_game.cpp +++ b/cockatrice/src/client/tabs/tab_game.cpp @@ -929,8 +929,8 @@ void TabGame::eventGameStateChanged(const Event_GameStateChanged &event, DeckViewContainer *deckViewContainer = deckViewContainers.value(playerId); if (playerInfo.has_deck_list()) { DeckLoader newDeck(QString::fromStdString(playerInfo.deck_list())); - PictureLoader::cacheCardPixmaps(CardDatabaseManager::getInstance()->getCardsByNameAndProviderId( - newDeck.getCardListWithProviderId())); + PictureLoader::cacheCardPixmaps( + CardDatabaseManager::getInstance()->getCards(newDeck.getCardRefList())); deckViewContainer->setDeck(newDeck); player->setDeck(newDeck); } @@ -1625,9 +1625,9 @@ void TabGame::createDeckViewContainerWidget(bool bReplay) deckViewContainerWidget->setLayout(deckViewContainerLayout); } -void TabGame::viewCardInfo(const QString &cardName, const QString &providerId) const +void TabGame::viewCardInfo(const CardRef &cardRef) const { - cardInfoFrameWidget->setCard(cardName, providerId); + cardInfoFrameWidget->setCard(cardRef); } void TabGame::createCardInfoDock(bool bReplay) diff --git a/cockatrice/src/client/tabs/tab_game.h b/cockatrice/src/client/tabs/tab_game.h index 370634742..667fae539 100644 --- a/cockatrice/src/client/tabs/tab_game.h +++ b/cockatrice/src/client/tabs/tab_game.h @@ -266,7 +266,7 @@ public: public slots: void sendGameCommand(PendingCommand *pend, int playerId = -1); void sendGameCommand(const ::google::protobuf::Message &command, int playerId = -1); - void viewCardInfo(const QString &cardName, const QString &providerId = "") const; + void viewCardInfo(const CardRef &cardRef = {}) const; }; #endif diff --git a/cockatrice/src/client/tapped_out_interface.cpp b/cockatrice/src/client/tapped_out_interface.cpp index 05d163970..9b9a239d4 100644 --- a/cockatrice/src/client/tapped_out_interface.cpp +++ b/cockatrice/src/client/tapped_out_interface.cpp @@ -95,7 +95,7 @@ void TappedOutInterface::analyzeDeck(DeckList *deck) void TappedOutInterface::copyDeckSplitMainAndSide(DeckList &source, DeckList &mainboard, DeckList &sideboard) { auto copyMainOrSide = [this, &mainboard, &sideboard](const auto node, const auto card) { - CardInfoPtr dbCard = cardDatabase.getCard(card->getName()); + CardInfoPtr dbCard = cardDatabase.getCardInfo(card->getName()); if (!dbCard || dbCard->getIsToken()) return; diff --git a/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/card_group_display_widget.cpp b/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/card_group_display_widget.cpp index c4ccfdcb3..d260c391d 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/card_group_display_widget.cpp +++ b/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/card_group_display_widget.cpp @@ -46,7 +46,7 @@ QWidget *CardGroupDisplayWidget::constructWidgetForIndex(int rowIndex) auto widget = new CardInfoPictureWithTextOverlayWidget(getLayoutParent(), true); widget->setScaleFactor(cardSizeWidget->getSlider()->value()); - widget->setCard(CardDatabaseManager::getInstance()->getCardByNameAndProviderId(cardName, cardProviderId)); + widget->setCard(CardDatabaseManager::getInstance()->getCard({cardName, cardProviderId})); connect(widget, &CardInfoPictureWithTextOverlayWidget::imageClicked, this, &CardGroupDisplayWidget::onClick); connect(widget, &CardInfoPictureWithTextOverlayWidget::hoveredOnCard, this, &CardGroupDisplayWidget::onHover); diff --git a/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.cpp b/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.cpp index 3fdfed9f1..615e0fcbf 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.cpp +++ b/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.cpp @@ -89,7 +89,7 @@ QWidget *FlatCardGroupDisplayWidget::constructWidgetForIndex(int row) auto widget = new CardInfoPictureWithTextOverlayWidget(flowWidget, true); widget->setScaleFactor(cardSizeWidget->getSlider()->value()); - widget->setCard(CardDatabaseManager::getInstance()->getCardByNameAndProviderId(cardName, cardProviderId)); + widget->setCard(CardDatabaseManager::getInstance()->getCard({cardName, cardProviderId})); connect(widget, &CardInfoPictureWithTextOverlayWidget::imageClicked, this, &FlatCardGroupDisplayWidget::onClick); connect(widget, &CardInfoPictureWithTextOverlayWidget::hoveredOnCard, this, &FlatCardGroupDisplayWidget::onHover); diff --git a/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.cpp b/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.cpp index ab6a9eb31..c9197c3a9 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.cpp +++ b/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.cpp @@ -11,10 +11,7 @@ #include #include -CardInfoDisplayWidget::CardInfoDisplayWidget(const QString &cardName, - const QString &providerId, - QWidget *parent, - Qt::WindowFlags flags) +CardInfoDisplayWidget::CardInfoDisplayWidget(const CardRef &cardRef, QWidget *parent, Qt::WindowFlags flags) : QFrame(parent, flags), aspectRatio((qreal)CARD_HEIGHT / (qreal)CARD_WIDTH), info(nullptr) { setContentsMargins(3, 3, 3, 3); @@ -22,7 +19,7 @@ CardInfoDisplayWidget::CardInfoDisplayWidget(const QString &cardName, pic->setObjectName("pic"); text = new CardInfoTextWidget(); text->setObjectName("text"); - connect(text, &CardInfoTextWidget::linkActivated, this, [this](const QString &card) { setCard(card); }); + connect(text, &CardInfoTextWidget::linkActivated, this, [this](const QString &card) { setCard({card}); }); auto *layout = new QVBoxLayout(); layout->setObjectName("layout"); @@ -40,7 +37,7 @@ CardInfoDisplayWidget::CardInfoDisplayWidget(const QString &cardName, pic->setFixedHeight(pixmapHeight); setFixedWidth(pixmapWidth + 150); - setCard(cardName, providerId); + setCard(cardRef); // ensure our parent gets a valid size to position us correctly resize(width(), sizeHint().height()); @@ -58,11 +55,11 @@ void CardInfoDisplayWidget::setCard(CardInfoPtr card) pic->setCard(info); } -void CardInfoDisplayWidget::setCard(const QString &cardName, const QString &providerId) +void CardInfoDisplayWidget::setCard(const CardRef &cardRef) { - setCard(CardDatabaseManager::getInstance()->guessCard(cardName, providerId)); + setCard(CardDatabaseManager::getInstance()->guessCard(cardRef)); if (info == nullptr) { - text->setInvalidCardName(cardName); + text->setInvalidCardName(cardRef.name); } } diff --git a/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.h b/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.h index 29ad703e7..d114586cb 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.h +++ b/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.h @@ -2,6 +2,7 @@ #define CARDINFOWIDGET_H #include "../../../../game/cards/card_info.h" +#include "card_ref.h" #include #include @@ -22,14 +23,11 @@ private: CardInfoTextWidget *text; public: - explicit CardInfoDisplayWidget(const QString &cardName, - const QString &providerId, - QWidget *parent = nullptr, - Qt::WindowFlags f = {}); + explicit CardInfoDisplayWidget(const CardRef &cardRef, QWidget *parent = nullptr, Qt::WindowFlags f = {}); public slots: void setCard(CardInfoPtr card); - void setCard(const QString &cardName, const QString &providerId = QString()); + void setCard(const CardRef &cardRef); void setCard(AbstractCardItem *card); private slots: diff --git a/cockatrice/src/client/ui/widgets/cards/card_info_frame_widget.cpp b/cockatrice/src/client/ui/widgets/cards/card_info_frame_widget.cpp index 08eafbf87..23a6fda46 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_info_frame_widget.cpp +++ b/cockatrice/src/client/ui/widgets/cards/card_info_frame_widget.cpp @@ -62,7 +62,7 @@ CardInfoFrameWidget::CardInfoFrameWidget(const QString &cardName, QWidget *paren setViewMode(SettingsCache::instance().getCardInfoViewMode()); // TODO: Change this to be by UUID - setCard(CardDatabaseManager::getInstance()->getCard(cardName)); + setCard(CardDatabaseManager::getInstance()->getCardInfo(cardName)); } void CardInfoFrameWidget::retranslateUi() @@ -166,12 +166,12 @@ void CardInfoFrameWidget::setCard(CardInfoPtr card) void CardInfoFrameWidget::setCard(const QString &cardName) { - setCard(CardDatabaseManager::getInstance()->guessCard(cardName)); + setCard(CardDatabaseManager::getInstance()->guessCard({cardName})); } -void CardInfoFrameWidget::setCard(const QString &cardName, const QString &providerId) +void CardInfoFrameWidget::setCard(const CardRef &cardRef) { - setCard(CardDatabaseManager::getInstance()->getCardByNameAndProviderId(cardName, providerId)); + setCard(CardDatabaseManager::getInstance()->getCard(cardRef)); } void CardInfoFrameWidget::setCard(AbstractCardItem *card) diff --git a/cockatrice/src/client/ui/widgets/cards/card_info_frame_widget.h b/cockatrice/src/client/ui/widgets/cards/card_info_frame_widget.h index 40a3b454a..6c521aff4 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_info_frame_widget.h +++ b/cockatrice/src/client/ui/widgets/cards/card_info_frame_widget.h @@ -2,6 +2,7 @@ #define CARDFRAME_H #include "../../../../game/cards/card_info.h" +#include "card_ref.h" #include #include @@ -46,7 +47,7 @@ public: public slots: void setCard(CardInfoPtr card); void setCard(const QString &cardName); - void setCard(const QString &cardName, const QString &providerId); + void setCard(const CardRef &cardRef); void setCard(AbstractCardItem *card); void viewTransformation(); void clearCard(); diff --git a/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.cpp b/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.cpp index 5e275f8e9..dcd42d581 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.cpp +++ b/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.cpp @@ -374,7 +374,7 @@ QMenu *CardInfoPictureWidget::createViewRelatedCardsMenu() QList relatedCards = info->getAllRelatedCards(); auto relatedCardExists = [](const CardRelation *cardRelation) { - return CardDatabaseManager::getInstance()->getCard(cardRelation->getName()) != nullptr; + return CardDatabaseManager::getInstance()->getCardInfo(cardRelation->getName()) != nullptr; }; bool atLeastOneGoodRelationFound = std::any_of(relatedCards.begin(), relatedCards.end(), relatedCardExists); @@ -388,7 +388,7 @@ QMenu *CardInfoPictureWidget::createViewRelatedCardsMenu() const auto &relatedCardName = relatedCard->getName(); QAction *viewCard = viewRelatedCards->addAction(relatedCardName); connect(viewCard, &QAction::triggered, this, [this, &relatedCardName] { - emit cardChanged(CardDatabaseManager::getInstance()->getCard(relatedCardName)); + emit cardChanged(CardDatabaseManager::getInstance()->getCardInfo(relatedCardName)); }); viewRelatedCards->addAction(viewCard); } diff --git a/cockatrice/src/client/ui/widgets/deck_analytics/mana_base_widget.cpp b/cockatrice/src/client/ui/widgets/deck_analytics/mana_base_widget.cpp index 895e2d64d..98e56df66 100644 --- a/cockatrice/src/client/ui/widgets/deck_analytics/mana_base_widget.cpp +++ b/cockatrice/src/client/ui/widgets/deck_analytics/mana_base_widget.cpp @@ -87,7 +87,7 @@ QHash ManaBaseWidget::analyzeManaBase() continue; for (int k = 0; k < currentCard->getNumber(); ++k) { - CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(currentCard->getName()); + CardInfoPtr info = CardDatabaseManager::getInstance()->getCardInfo(currentCard->getName()); if (info) { auto devotion = determineManaProduction(info->getText()); mergeManaCounts(manaBaseMap, devotion); diff --git a/cockatrice/src/client/ui/widgets/deck_analytics/mana_curve_widget.cpp b/cockatrice/src/client/ui/widgets/deck_analytics/mana_curve_widget.cpp index 1cef0d794..0831ad655 100644 --- a/cockatrice/src/client/ui/widgets/deck_analytics/mana_curve_widget.cpp +++ b/cockatrice/src/client/ui/widgets/deck_analytics/mana_curve_widget.cpp @@ -53,7 +53,7 @@ std::unordered_map ManaCurveWidget::analyzeManaCurve() continue; for (int k = 0; k < currentCard->getNumber(); ++k) { - CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(currentCard->getName()); + CardInfoPtr info = CardDatabaseManager::getInstance()->getCardInfo(currentCard->getName()); if (info) { int cmc = info->getCmc().toInt(); manaCurveMap[cmc]++; diff --git a/cockatrice/src/client/ui/widgets/deck_analytics/mana_devotion_widget.cpp b/cockatrice/src/client/ui/widgets/deck_analytics/mana_devotion_widget.cpp index 50b241a2a..485afc475 100644 --- a/cockatrice/src/client/ui/widgets/deck_analytics/mana_devotion_widget.cpp +++ b/cockatrice/src/client/ui/widgets/deck_analytics/mana_devotion_widget.cpp @@ -55,7 +55,7 @@ std::unordered_map ManaDevotionWidget::analyzeManaDevotion() continue; for (int k = 0; k < currentCard->getNumber(); ++k) { - CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(currentCard->getName()); + CardInfoPtr info = CardDatabaseManager::getInstance()->getCardInfo(currentCard->getName()); if (info) { auto devotion = countManaSymbols(info->getManaCost()); mergeManaCounts(manaDevotionMap, devotion); diff --git a/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_database_display_widget.cpp b/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_database_display_widget.cpp index 59094e1d0..ee5750ca6 100644 --- a/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_database_display_widget.cpp +++ b/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_database_display_widget.cpp @@ -136,16 +136,16 @@ void DeckEditorDatabaseDisplayWidget::clearAllDatabaseFilters() void DeckEditorDatabaseDisplayWidget::updateCard(const QModelIndex ¤t, const QModelIndex & /*previous*/) { const QString cardName = current.sibling(current.row(), 0).data().toString(); - const QString cardProviderID = CardDatabaseManager::getInstance()->getPreferredPrintingProviderIdForCard(cardName); + const QString cardProviderID = CardDatabaseManager::getInstance()->getPreferredPrintingProviderId(cardName); if (!current.isValid()) { return; } if (!current.model()->hasChildren(current.sibling(current.row(), 0))) { - CardInfoPtr card = CardDatabaseManager::getInstance()->getCardByNameAndProviderId(cardName, cardProviderID); + CardInfoPtr card = CardDatabaseManager::getInstance()->getCard({cardName, cardProviderID}); if (!card) { - card = CardDatabaseManager::getInstance()->getCard(cardName); + card = CardDatabaseManager::getInstance()->getCardInfo(cardName); } emit cardChanged(card); } @@ -180,7 +180,7 @@ CardInfoPtr DeckEditorDatabaseDisplayWidget::currentCardInfo() const const QString cardName = currentIndex.sibling(currentIndex.row(), 0).data().toString(); - return CardDatabaseManager::getInstance()->getCard(cardName); + return CardDatabaseManager::getInstance()->getCardInfo(cardName); } void DeckEditorDatabaseDisplayWidget::databaseCustomMenu(QPoint point) diff --git a/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_deck_dock_widget.cpp b/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_deck_dock_widget.cpp index dbc4f7e93..786c9b8df 100644 --- a/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_deck_dock_widget.cpp +++ b/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_deck_dock_widget.cpp @@ -227,8 +227,7 @@ CardInfoPtr DeckEditorDeckDockWidget::getCurrentCard() if (!current.model()->hasChildren(current.sibling(current.row(), 0))) { QString cardName = current.sibling(current.row(), 1).data().toString(); QString providerId = current.sibling(current.row(), 4).data().toString(); - if (CardInfoPtr selectedCard = - CardDatabaseManager::getInstance()->getCardByNameAndProviderId(cardName, providerId)) { + if (CardInfoPtr selectedCard = CardDatabaseManager::getInstance()->getCard({cardName, providerId})) { return selectedCard; } } @@ -287,11 +286,9 @@ void DeckEditorDeckDockWidget::updateBannerCardComboBox() continue; for (int k = 0; k < currentCard->getNumber(); ++k) { - CardInfoPtr info = CardDatabaseManager::getInstance()->getCardByNameAndProviderId( - currentCard->getName(), currentCard->getCardProviderId()); + CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(currentCard->toCardRef()); if (info) { - bannerCardSet.insert( - QPair(currentCard->getName(), currentCard->getCardProviderId())); + bannerCardSet.insert({currentCard->getName(), currentCard->getCardProviderId()}); } } } @@ -312,13 +309,13 @@ void DeckEditorDeckDockWidget::updateBannerCardComboBox() int restoredIndex = bannerCardComboBox->findText(currentText); if (restoredIndex != -1) { bannerCardComboBox->setCurrentIndex(restoredIndex); - if (deckModel->getDeckList()->getBannerCard().second != + if (deckModel->getDeckList()->getBannerCard().providerId != bannerCardComboBox->currentData().value>().second) { setBannerCard(restoredIndex); } } else { // Add a placeholder "-" and set it as the current selection - int bannerIndex = bannerCardComboBox->findText(deckModel->getDeckList()->getBannerCard().first); + int bannerIndex = bannerCardComboBox->findText(deckModel->getDeckList()->getBannerCard().name); if (bannerIndex != -1) { bannerCardComboBox->setCurrentIndex(bannerIndex); } else { @@ -333,8 +330,8 @@ void DeckEditorDeckDockWidget::updateBannerCardComboBox() void DeckEditorDeckDockWidget::setBannerCard(int /* changedIndex */) { - auto cardAndId = bannerCardComboBox->currentData().value>(); - deckModel->getDeckList()->setBannerCard(cardAndId); + auto [name, id] = bannerCardComboBox->currentData().value>(); + deckModel->getDeckList()->setBannerCard({name, id}); deckEditor->setModified(true); emit deckModified(); } @@ -360,7 +357,7 @@ void DeckEditorDeckDockWidget::setDeck(DeckLoader *_deck) nameEdit->setText(deckModel->getDeckList()->getName()); commentsEdit->setText(deckModel->getDeckList()->getComments()); - bannerCardComboBox->setCurrentText(deckModel->getDeckList()->getBannerCard().first); + bannerCardComboBox->setCurrentText(deckModel->getDeckList()->getBannerCard().name); updateBannerCardComboBox(); updateHash(); deckModel->sort(deckView->header()->sortIndicatorSection(), deckView->header()->sortIndicatorOrder()); @@ -476,9 +473,9 @@ bool DeckEditorDeckDockWidget::swapCard(const QModelIndex ¤tIndex) const QString otherZoneName = zoneName == DECK_ZONE_MAIN ? DECK_ZONE_SIDE : DECK_ZONE_MAIN; // Third argument (true) says create the card no matter what, even if not in DB - QModelIndex newCardIndex = - deckModel->addCard(cardName, CardDatabaseManager::getInstance()->getSpecificPrinting(cardName, cardProviderID), - otherZoneName, true); + QModelIndex newCardIndex = deckModel->addCard( + cardName, CardDatabaseManager::getInstance()->getSpecificPrinting({cardName, cardProviderID}), otherZoneName, + true); recursiveExpand(newCardIndex); return true; diff --git a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_card_overlay_widget.cpp b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_card_overlay_widget.cpp index cd6b08f25..06cd89384 100644 --- a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_card_overlay_widget.cpp +++ b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_card_overlay_widget.cpp @@ -44,8 +44,7 @@ PrintingSelectorCardOverlayWidget::PrintingSelectorCardOverlayWidget(QWidget *pa cardInfoPicture = new CardInfoPictureWidget(this); cardInfoPicture->setMinimumSize(0, 0); cardInfoPicture->setScaleFactor(cardSizeSlider->value()); - setCard = CardDatabaseManager::getInstance()->getCardByNameAndProviderId(rootCard->getName(), - _printingInfo.getProperty("uuid")); + setCard = CardDatabaseManager::getInstance()->getCard({rootCard->getName(), _printingInfo.getProperty("uuid")}); cardInfoPicture->setCard(setCard); mainLayout->addWidget(cardInfoPicture); @@ -177,7 +176,7 @@ void PrintingSelectorCardOverlayWidget::customMenu(QPoint point) if (preferredProviderId.isEmpty() || preferredProviderId != cardProviderId) { auto *pinAction = preferenceMenu->addAction(tr("Pin Printing")); connect(pinAction, &QAction::triggered, this, [this, cardProviderId]() { - SettingsCache::instance().cardOverrides().setCardPreferenceOverride(rootCard->getName(), cardProviderId); + SettingsCache::instance().cardOverrides().setCardPreferenceOverride({rootCard->getName(), cardProviderId}); emit cardPreferenceChanged(); }); } else { @@ -199,7 +198,7 @@ void PrintingSelectorCardOverlayWidget::customMenu(QPoint point) const QString &relatedCardName = rel->getName(); QAction *relatedCard = relatedMenu->addAction(relatedCardName); connect(relatedCard, &QAction::triggered, deckEditor, [this, relatedCardName] { - deckEditor->updateCard(CardDatabaseManager::getInstance()->getCard(relatedCardName)); + deckEditor->updateCard(CardDatabaseManager::getInstance()->getCardInfo(relatedCardName)); deckEditor->showPrintingSelector(); }); } diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp index b1d5463ee..72daf8a30 100644 --- a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp @@ -228,13 +228,13 @@ void VisualDatabaseDisplayWidget::populateCards() QVariant name = databaseDisplayModel->data(index, Qt::DisplayRole); qCDebug(VisualDatabaseDisplayLog) << name.toString(); - if (CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(name.toString())) { + if (CardInfoPtr info = CardDatabaseManager::getInstance()->getCardInfo(name.toString())) { if (setFilter) { SetToPrintingsMap setMap = info->getSets(); if (setMap.contains(setFilter->term())) { for (PrintingInfo printing : setMap[setFilter->term()]) { - addCard(CardDatabaseManager::getInstance()->getCardByNameAndProviderId( - name.toString(), printing.getProperty("uuid"))); + addCard(CardDatabaseManager::getInstance()->getCard( + {name.toString(), printing.getProperty("uuid")})); } } } else { @@ -294,13 +294,13 @@ void VisualDatabaseDisplayWidget::loadNextPage() for (int row = start; row < end; ++row) { QModelIndex index = databaseDisplayModel->index(row, CardDatabaseModel::NameColumn); QVariant name = databaseDisplayModel->data(index, Qt::DisplayRole); - if (CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(name.toString())) { + if (CardInfoPtr info = CardDatabaseManager::getInstance()->getCardInfo(name.toString())) { if (setFilter) { SetToPrintingsMap setMap = info->getSets(); if (setMap.contains(setFilter->term())) { for (PrintingInfo printing : setMap[setFilter->term()]) { - addCard(CardDatabaseManager::getInstance()->getCardByNameAndProviderId( - name.toString(), printing.getProperty("uuid"))); + addCard(CardDatabaseManager::getInstance()->getCard( + {name.toString(), printing.getProperty("uuid")})); } } } else { diff --git a/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.cpp index 8530a8233..efa755a11 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.cpp @@ -101,8 +101,7 @@ QList VisualDeckEditorSampleHandWidget::getRandomCards(int amountTo continue; for (int k = 0; k < currentCard->getNumber(); ++k) { - CardInfoPtr info = CardDatabaseManager::getInstance()->getCardByNameAndProviderId( - currentCard->getName(), currentCard->getCardProviderId()); + CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(currentCard->toCardRef()); if (info) { mainDeckCards.append(info); } diff --git a/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.cpp index d58baacad..8cfb02f0f 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.cpp @@ -42,7 +42,7 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, DeckListModel *_ if (!searchBar->hasFocus()) return; - CardInfoPtr card = CardDatabaseManager::getInstance()->getCard(searchBar->text()); + CardInfoPtr card = CardDatabaseManager::getInstance()->getCardInfo(searchBar->text()); if (card) { emit cardAdditionRequested(card); } @@ -103,7 +103,7 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, DeckListModel *_ // Search button functionality searchPushButton = new QPushButton(this); connect(searchPushButton, &QPushButton::clicked, this, [=, this]() { - CardInfoPtr card = CardDatabaseManager::getInstance()->getCard(searchBar->text()); + CardInfoPtr card = CardDatabaseManager::getInstance()->getCardInfo(searchBar->text()); if (card) { emit cardAdditionRequested(card); } diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp index cce08ef8f..f9e4f0c85 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp @@ -74,10 +74,9 @@ void DeckPreviewWidget::initializeUi(const bool deckLoadSuccess) if (!deckLoadSuccess) { return; } - auto bannerCard = deckLoader->getBannerCard().first.isEmpty() + auto bannerCard = deckLoader->getBannerCard().name.isEmpty() ? CardInfoPtr() - : CardDatabaseManager::getInstance()->getCardByNameAndProviderId( - deckLoader->getBannerCard().first, deckLoader->getBannerCard().second); + : CardDatabaseManager::getInstance()->getCard(deckLoader->getBannerCard()); bannerCardDisplayWidget->setCard(bannerCard); bannerCardDisplayWidget->setFontSize(24); @@ -91,7 +90,7 @@ void DeckPreviewWidget::initializeUi(const bool deckLoadSuccess) bannerCardComboBox = new QComboBox(this); bannerCardComboBox->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); bannerCardComboBox->setObjectName("bannerCardComboBox"); - bannerCardComboBox->setCurrentText(deckLoader->getBannerCard().first); + bannerCardComboBox->setCurrentText(deckLoader->getBannerCard().name); bannerCardComboBox->installEventFilter(new NoScrollFilter()); connect(bannerCardComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &DeckPreviewWidget::setBannerCard); @@ -161,7 +160,7 @@ QString DeckPreviewWidget::getColorIdentity() QSet colorSet; // A set to collect unique color symbols (e.g., W, U, B, R, G) for (const QString &cardName : cardList) { - CardInfoPtr currentCard = CardDatabaseManager::getInstance()->getCard(cardName); + CardInfoPtr currentCard = CardDatabaseManager::getInstance()->getCardInfo(cardName); if (currentCard) { QString colors = currentCard->getColors(); // Assuming this returns something like "WUB" for (const QChar &color : colors) { @@ -274,7 +273,7 @@ void DeckPreviewWidget::updateBannerCardComboBox() bannerCardComboBox->setCurrentIndex(restoredIndex); } else { // Add a placeholder "-" and set it as the current selection - int bannerIndex = bannerCardComboBox->findText(deckLoader->getBannerCard().first); + int bannerIndex = bannerCardComboBox->findText(deckLoader->getBannerCard().name); if (bannerIndex != -1) { bannerCardComboBox->setCurrentIndex(bannerIndex); } else { @@ -290,11 +289,11 @@ void DeckPreviewWidget::updateBannerCardComboBox() void DeckPreviewWidget::setBannerCard(int /* changedIndex */) { - auto nameAndId = bannerCardComboBox->currentData().value>(); - deckLoader->setBannerCard(nameAndId); + auto [name, id] = bannerCardComboBox->currentData().value>(); + CardRef cardRef = {name, id}; + deckLoader->setBannerCard(cardRef); deckLoader->saveToFile(filePath, DeckLoader::getFormatFromName(filePath)); - bannerCardDisplayWidget->setCard( - CardDatabaseManager::getInstance()->getCardByNameAndProviderId(nameAndId.first, nameAndId.second)); + bannerCardDisplayWidget->setCard(CardDatabaseManager::getInstance()->getCard(cardRef)); } void DeckPreviewWidget::imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance) diff --git a/cockatrice/src/deck/deck_list_model.cpp b/cockatrice/src/deck/deck_list_model.cpp index 4111b3be5..5d536c473 100644 --- a/cockatrice/src/deck/deck_list_model.cpp +++ b/cockatrice/src/deck/deck_list_model.cpp @@ -66,7 +66,7 @@ void DeckListModel::rebuildTree() continue; } - CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(currentCard->getName()); + CardInfoPtr info = CardDatabaseManager::getInstance()->getCardInfo(currentCard->getName()); QString groupCriteria = getGroupCriteriaForCard(info); auto *groupNode = dynamic_cast(node->findChild(groupCriteria)); @@ -337,7 +337,7 @@ DecklistModelCardNode *DeckListModel::findCardNode(const QString &cardName, return nullptr; } - CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(cardName); + CardInfoPtr info = CardDatabaseManager::getInstance()->getCardInfo(cardName); if (!info) { return nullptr; } @@ -375,8 +375,7 @@ QModelIndex DeckListModel::addCard(const QString &cardName, const QString &zoneName, bool abAddAnyway) { - CardInfoPtr cardInfo = - CardDatabaseManager::getInstance()->getCardByNameAndProviderId(cardName, printingInfo.getProperty("uuid")); + CardInfoPtr cardInfo = CardDatabaseManager::getInstance()->getCard({cardName, printingInfo.getProperty("uuid")}); if (cardInfo == nullptr) { if (abAddAnyway) { @@ -559,8 +558,7 @@ QList DeckListModel::getCardsAsCardInfoPtrs() const if (!currentCard) continue; for (int k = 0; k < currentCard->getNumber(); ++k) { - CardInfoPtr info = CardDatabaseManager::getInstance()->getCardByNameAndProviderId( - currentCard->getName(), currentCard->getCardProviderId()); + CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(currentCard->toCardRef()); if (info) { cards.append(info); } else { @@ -593,8 +591,7 @@ QList DeckListModel::getCardsAsCardInfoPtrsForZone(QString zoneName if (!currentCard) continue; for (int k = 0; k < currentCard->getNumber(); ++k) { - CardInfoPtr info = CardDatabaseManager::getInstance()->getCardByNameAndProviderId( - currentCard->getName(), currentCard->getCardProviderId()); + CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(currentCard->toCardRef()); if (info) { cards.append(info); } else { diff --git a/cockatrice/src/deck/deck_loader.cpp b/cockatrice/src/deck/deck_loader.cpp index 6a3543d1d..07909f575 100644 --- a/cockatrice/src/deck/deck_loader.cpp +++ b/cockatrice/src/deck/deck_loader.cpp @@ -281,7 +281,7 @@ QString DeckLoader::exportDeckToDecklist(DecklistWebsite website) // Set up the function to call auto formatDeckListForExport = [&mainBoardCards, &sideBoardCards](const auto *node, const auto *card) { // Get the card name - CardInfoPtr dbCard = CardDatabaseManager::getInstance()->getCard(card->getName()); + CardInfoPtr dbCard = CardDatabaseManager::getInstance()->getCardInfo(card->getName()); if (!dbCard || dbCard->getIsToken()) { // If it's a token, we don't care about the card. return; @@ -466,7 +466,7 @@ void DeckLoader::saveToStream_DeckZone(QTextStream &out, for (int j = 0; j < zoneNode->size(); j++) { auto *card = dynamic_cast(zoneNode->at(j)); - CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(card->getName()); + CardInfoPtr info = CardDatabaseManager::getInstance()->getCardInfo(card->getName()); QString cardType = info ? info->getMainCardType() : "unknown"; cardsByType.insert(cardType, card); @@ -582,7 +582,7 @@ bool DeckLoader::convertToCockatriceFormat(QString fileName) QString DeckLoader::getCardZoneFromName(QString cardName, QString currentZoneName) { - CardInfoPtr card = CardDatabaseManager::getInstance()->getCard(cardName); + CardInfoPtr card = CardDatabaseManager::getInstance()->getCardInfo(cardName); if (card && card->getIsToken()) { return DECK_ZONE_TOKENS; @@ -594,7 +594,7 @@ QString DeckLoader::getCardZoneFromName(QString cardName, QString currentZoneNam QString DeckLoader::getCompleteCardName(const QString &cardName) const { if (CardDatabaseManager::getInstance()) { - CardInfoPtr temp = CardDatabaseManager::getInstance()->guessCard(cardName); + CardInfoPtr temp = CardDatabaseManager::getInstance()->guessCard({cardName}); if (temp) { return temp->getName(); } diff --git a/cockatrice/src/deck/deck_stats_interface.cpp b/cockatrice/src/deck/deck_stats_interface.cpp index 19b8f4447..e95785fd6 100644 --- a/cockatrice/src/deck/deck_stats_interface.cpp +++ b/cockatrice/src/deck/deck_stats_interface.cpp @@ -70,7 +70,7 @@ void DeckStatsInterface::analyzeDeck(DeckList *deck) void DeckStatsInterface::copyDeckWithoutTokens(DeckList &source, DeckList &destination) { auto copyIfNotAToken = [this, &destination](const auto node, const auto card) { - CardInfoPtr dbCard = cardDatabase.getCard(card->getName()); + CardInfoPtr dbCard = cardDatabase.getCardInfo(card->getName()); if (dbCard && !dbCard->getIsToken()) { DecklistCardNode *addedCard = destination.addCard(card->getName(), node->getName(), -1); addedCard->setNumber(card->getNumber()); diff --git a/cockatrice/src/dialogs/dlg_edit_tokens.cpp b/cockatrice/src/dialogs/dlg_edit_tokens.cpp index a93a77963..83a27cc6a 100644 --- a/cockatrice/src/dialogs/dlg_edit_tokens.cpp +++ b/cockatrice/src/dialogs/dlg_edit_tokens.cpp @@ -152,7 +152,7 @@ void DlgEditTokens::actAddToken() name = getTextWithMax(this, tr("Add token"), tr("Please enter the name of the token:")); if (name.isEmpty()) return; - if (databaseModel->getDatabase()->getCard(name)) { + if (databaseModel->getDatabase()->getCardInfo(name)) { QMessageBox::critical(this, tr("Error"), tr("The chosen name conflicts with an existing card or token.\nMake sure to enable " "the 'Token' set in the \"Manage sets\" dialog to display them correctly.")); diff --git a/cockatrice/src/dialogs/dlg_select_set_for_cards.cpp b/cockatrice/src/dialogs/dlg_select_set_for_cards.cpp index d6067644e..036994c05 100644 --- a/cockatrice/src/dialogs/dlg_select_set_for_cards.cpp +++ b/cockatrice/src/dialogs/dlg_select_set_for_cards.cpp @@ -222,7 +222,7 @@ QMap DlgSelectSetForCards::getSetsForCards() if (!currentCard) continue; - CardInfoPtr infoPtr = CardDatabaseManager::getInstance()->getCard(currentCard->getName()); + CardInfoPtr infoPtr = CardDatabaseManager::getInstance()->getCardInfo(currentCard->getName()); if (!infoPtr) continue; @@ -290,15 +290,15 @@ void DlgSelectSetForCards::updateCardLists() if (!found) { // The card was not in any selected set - CardInfoPtr infoPtr = CardDatabaseManager::getInstance()->getCard(currentCard->getName()); + CardInfoPtr infoPtr = CardDatabaseManager::getInstance()->getCardInfo(currentCard->getName()); CardInfoPictureWidget *picture_widget = new CardInfoPictureWidget(uneditedCardsFlowWidget); picture_widget->setCard(infoPtr); uneditedCardsFlowWidget->addWidget(picture_widget); } else { - CardInfoPtr infoPtr = CardDatabaseManager::getInstance()->getCardByNameAndProviderId( - currentCard->getName(), CardDatabaseManager::getInstance() - ->getSpecificPrinting(currentCard->getName(), foundSetName, "") - .getProperty("uuid")); + CardInfoPtr infoPtr = CardDatabaseManager::getInstance()->getCard( + {currentCard->getName(), CardDatabaseManager::getInstance() + ->getSpecificPrinting(currentCard->getName(), foundSetName, "") + .getProperty("uuid")}); CardInfoPictureWidget *picture_widget = new CardInfoPictureWidget(modifiedCardsFlowWidget); picture_widget->setCard(infoPtr); modifiedCardsFlowWidget->addWidget(picture_widget); @@ -376,7 +376,7 @@ QMap DlgSelectSetForCards::getCardsForSets() if (!currentCard) continue; - CardInfoPtr infoPtr = CardDatabaseManager::getInstance()->getCard(currentCard->getName()); + CardInfoPtr infoPtr = CardDatabaseManager::getInstance()->getCardInfo(currentCard->getName()); if (!infoPtr) continue; @@ -626,17 +626,17 @@ void SetEntryWidget::updateCardDisplayWidgets() for (const QString &cardName : possibleCards) { CardInfoPictureWidget *picture_widget = new CardInfoPictureWidget(cardListContainer); - picture_widget->setCard(CardDatabaseManager::getInstance()->getCardByNameAndProviderId( - cardName, - CardDatabaseManager::getInstance()->getSpecificPrinting(cardName, setName, nullptr).getProperty("uuid"))); + QString providerId = + CardDatabaseManager::getInstance()->getSpecificPrinting(cardName, setName, nullptr).getProperty("uuid"); + picture_widget->setCard(CardDatabaseManager::getInstance()->getCard({cardName, providerId})); cardListContainer->addWidget(picture_widget); } for (const QString &cardName : unusedCards) { CardInfoPictureWidget *picture_widget = new CardInfoPictureWidget(alreadySelectedCardListContainer); - picture_widget->setCard(CardDatabaseManager::getInstance()->getCardByNameAndProviderId( - cardName, - CardDatabaseManager::getInstance()->getSpecificPrinting(cardName, setName, nullptr).getProperty("uuid"))); + QString providerId = + CardDatabaseManager::getInstance()->getSpecificPrinting(cardName, setName, nullptr).getProperty("uuid"); + picture_widget->setCard(CardDatabaseManager::getInstance()->getCard({cardName, providerId})); alreadySelectedCardListContainer->addWidget(picture_widget); } } diff --git a/cockatrice/src/game/board/abstract_card_item.cpp b/cockatrice/src/game/board/abstract_card_item.cpp index b93ad7271..fa74db3c9 100644 --- a/cockatrice/src/game/board/abstract_card_item.cpp +++ b/cockatrice/src/game/board/abstract_card_item.cpp @@ -12,13 +12,9 @@ #include #include -AbstractCardItem::AbstractCardItem(QGraphicsItem *parent, - const QString &_name, - const QString &_providerId, - Player *_owner, - int _id) - : ArrowTarget(_owner, parent), id(_id), name(_name), providerId(_providerId), tapped(false), facedown(false), - tapAngle(0), bgColor(Qt::transparent), isHovered(false), realZValue(0) +AbstractCardItem::AbstractCardItem(QGraphicsItem *parent, const CardRef &cardRef, Player *_owner, int _id) + : ArrowTarget(_owner, parent), id(_id), cardRef(cardRef), tapped(false), facedown(false), tapAngle(0), + bgColor(Qt::transparent), isHovered(false), realZValue(0) { setCursor(Qt::OpenHandCursor); setFlag(ItemIsSelectable); @@ -37,7 +33,7 @@ AbstractCardItem::AbstractCardItem(QGraphicsItem *parent, AbstractCardItem::~AbstractCardItem() { - emit deleteCardInfoPopup(name); + emit deleteCardInfoPopup(cardRef.name); } QRectF AbstractCardItem::boundingRect() const @@ -61,13 +57,13 @@ void AbstractCardItem::pixmapUpdated() void AbstractCardItem::refreshCardInfo() { - info = CardDatabaseManager::getInstance()->getCardByNameAndProviderId(name, providerId); + info = CardDatabaseManager::getInstance()->getCard(cardRef); - if (!info && !name.isEmpty()) { + if (!info && !cardRef.name.isEmpty()) { QVariantHash properties = QVariantHash(); - info = CardInfo::newInstance(name, "", true, QVariantHash(), QList(), QList(), - SetToPrintingsMap(), false, false, -1, false); + info = CardInfo::newInstance(cardRef.name, "", true, QVariantHash(), QList(), + QList(), SetToPrintingsMap(), false, false, -1, false); } if (info.data()) { connect(info.data(), &CardInfo::pixmapUpdated, this, &AbstractCardItem::pixmapUpdated); @@ -114,7 +110,7 @@ void AbstractCardItem::paintPicture(QPainter *painter, const QSizeF &translatedS QPixmap translatedPixmap; bool paintImage = true; - if (facedown || name.isEmpty()) { + if (facedown || cardRef.name.isEmpty()) { // never reveal card color, always paint the card back PictureLoader::getCardBackPixmap(translatedPixmap, translatedSize.toSize()); } else { @@ -154,7 +150,7 @@ void AbstractCardItem::paintPicture(QPainter *painter, const QSizeF &translatedS if (SettingsCache::instance().debug().getShowCardId()) { prefix = "#" + QString::number(id) + " "; } - nameStr = prefix + name; + nameStr = prefix + cardRef.name; } painter->drawText(QRectF(3 * scaleFactor, 3 * scaleFactor, translatedSize.width() - 6 * scaleFactor, translatedSize.height() - 6 * scaleFactor), @@ -188,30 +184,17 @@ void AbstractCardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem * painter->restore(); } -void AbstractCardItem::setName(const QString &_name) +void AbstractCardItem::setCardRef(const CardRef &_cardRef) { - if (name == _name) - return; - - emit deleteCardInfoPopup(name); - if (info) - disconnect(info.data(), nullptr, this, nullptr); - name = _name; - - refreshCardInfo(); -} - -void AbstractCardItem::setProviderId(const QString &_providerId) -{ - if (providerId == _providerId) { + if (cardRef == _cardRef) { return; } - emit deleteCardInfoPopup(name); + emit deleteCardInfoPopup(cardRef.name); if (info) { disconnect(info.data(), nullptr, this, nullptr); } - providerId = _providerId; + cardRef = _cardRef; refreshCardInfo(); } @@ -299,7 +282,7 @@ void AbstractCardItem::setFaceDown(bool _facedown) void AbstractCardItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { if ((event->modifiers() & Qt::AltModifier) && event->button() == Qt::LeftButton) { - emit cardShiftClicked(name); + emit cardShiftClicked(cardRef.name); } else if ((event->modifiers() & Qt::ControlModifier)) { setSelected(!isSelected()); } else if (!isSelected()) { @@ -309,14 +292,14 @@ void AbstractCardItem::mousePressEvent(QGraphicsSceneMouseEvent *event) if (event->button() == Qt::LeftButton) setCursor(Qt::ClosedHandCursor); else if (event->button() == Qt::MiddleButton) - emit showCardInfoPopup(event->screenPos(), name, providerId); + emit showCardInfoPopup(event->screenPos(), cardRef); event->accept(); } void AbstractCardItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if (event->button() == Qt::MiddleButton) - emit deleteCardInfoPopup(name); + emit deleteCardInfoPopup(cardRef.name); // This function ensures the parent function doesn't mess around with our selection. event->accept(); diff --git a/cockatrice/src/game/board/abstract_card_item.h b/cockatrice/src/game/board/abstract_card_item.h index 94de7596a..1a64676fe 100644 --- a/cockatrice/src/game/board/abstract_card_item.h +++ b/cockatrice/src/game/board/abstract_card_item.h @@ -3,6 +3,7 @@ #include "../cards/card_info.h" #include "arrow_target.h" +#include "card_ref.h" class Player; @@ -15,8 +16,7 @@ class AbstractCardItem : public ArrowTarget protected: CardInfoPtr info; int id; - QString name; - QString providerId; + CardRef cardRef; bool tapped; bool facedown; int tapAngle; @@ -34,7 +34,7 @@ public slots: signals: void hovered(AbstractCardItem *card); - void showCardInfoPopup(const QPoint &pos, const QString &cardName, const QString &providerId); + void showCardInfoPopup(const QPoint &pos, const CardRef &cardRef); void deleteCardInfoPopup(QString cardName); void sigPixmapUpdated(); void cardShiftClicked(QString cardName); @@ -49,8 +49,7 @@ public: return Type; } explicit AbstractCardItem(QGraphicsItem *parent = nullptr, - const QString &_name = QString(), - const QString &_providerId = QString(), + const CardRef &cardRef = {}, Player *_owner = nullptr, int _id = -1); ~AbstractCardItem() override; @@ -73,14 +72,17 @@ public: } QString getName() const { - return name; + return cardRef.name; } - void setName(const QString &_name = QString()); QString getProviderId() const { - return providerId; + return cardRef.providerId; + } + void setCardRef(const CardRef &_cardRef); + CardRef getCardRef() const + { + return cardRef; } - void setProviderId(const QString &_providerId = QString()); qreal getRealZValue() const { return realZValue; @@ -105,7 +107,7 @@ public: void processHoverEvent(); void deleteCardInfoPopup() { - emit deleteCardInfoPopup(name); + emit deleteCardInfoPopup(cardRef.name); } protected: diff --git a/cockatrice/src/game/board/card_item.cpp b/cockatrice/src/game/board/card_item.cpp index f9d702d92..0e4504dd7 100644 --- a/cockatrice/src/game/board/card_item.cpp +++ b/cockatrice/src/game/board/card_item.cpp @@ -18,14 +18,9 @@ #include #include -CardItem::CardItem(Player *_owner, - QGraphicsItem *parent, - const QString &_name, - const QString &_providerId, - int _cardid, - CardZone *_zone) - : AbstractCardItem(parent, _name, _providerId, _owner, _cardid), zone(_zone), attacking(false), - destroyOnZoneChange(false), doesntUntap(false), dragItem(nullptr), attachedTo(nullptr) +CardItem::CardItem(Player *_owner, QGraphicsItem *parent, const CardRef &cardRef, int _cardid, CardZone *_zone) + : AbstractCardItem(parent, cardRef, _owner, _cardid), zone(_zone), attacking(false), destroyOnZoneChange(false), + doesntUntap(false), dragItem(nullptr), attachedTo(nullptr) { owner->addCard(this); @@ -246,8 +241,7 @@ void CardItem::processCardInfo(const ServerInfo_Card &_info) } setId(_info.id()); - setProviderId(QString::fromStdString(_info.provider_id())); - setName(QString::fromStdString(_info.name())); + setCardRef({QString::fromStdString(_info.name()), QString::fromStdString(_info.provider_id())}); setAttacking(_info.attacking()); setFaceDown(_info.face_down()); setPT(QString::fromStdString(_info.pt())); diff --git a/cockatrice/src/game/board/card_item.h b/cockatrice/src/game/board/card_item.h index 5b4b325ba..565c51fbc 100644 --- a/cockatrice/src/game/board/card_item.h +++ b/cockatrice/src/game/board/card_item.h @@ -51,8 +51,7 @@ public: } explicit CardItem(Player *_owner, QGraphicsItem *parent = nullptr, - const QString &_name = QString(), - const QString &_providerId = QString(), + const CardRef &cardRef = {}, int _cardid = -1, CardZone *_zone = nullptr); ~CardItem() override; diff --git a/cockatrice/src/game/cards/card_database.cpp b/cockatrice/src/game/cards/card_database.cpp index b8873c7d2..cb0827c8b 100644 --- a/cockatrice/src/game/cards/card_database.cpp +++ b/cockatrice/src/game/cards/card_database.cpp @@ -109,12 +109,25 @@ void CardDatabase::removeCard(CardInfoPtr card) emit cardRemoved(card); } -CardInfoPtr CardDatabase::getCard(const QString &cardName) const +/** + * Looks up the generic cardInfo (the CardInfoPtr that does not refer to a specific printing) corresponding to the + * cardName. + * + * @param cardName The card name to look up + * @return A generic CardInfoPtr, or null if not corresponding CardInfo is found. + */ +CardInfoPtr CardDatabase::getCardInfo(const QString &cardName) const { return cards.value(cardName); } -QList CardDatabase::getCards(const QStringList &cardNames) const +/** + * Looks up the generic cardInfos (the CardInfoPtr that does not refer to a specific printing) for a list of card names. + * + * @param cardNames The card names to look up + * @return A List of generic CardInfoPtr. Any failed lookups will be ignored and dropped from the resulting list + */ +QList CardDatabase::getCardInfos(const QStringList &cardNames) const { QList cardInfos; for (const QString &cardName : cardNames) { @@ -126,11 +139,19 @@ QList CardDatabase::getCards(const QStringList &cardNames) const return cardInfos; } -QList CardDatabase::getCardsByNameAndProviderId(const QMap &cardNames) const +/** + * Looks up the CardInfoPtrs corresponding to the CardRefs + * + * @param cardRefs The cards to look up. If providerId is null for an entry, will look up the generic CardInfo for that + * entry's cardName. + * @return A list of specific printings of cards. Any failed lookups will be ignored and dropped from the resulting + * list. + */ +QList CardDatabase::getCards(const QList &cardRefs) const { QList cardInfos; - for (const QString &cardName : cardNames) { - CardInfoPtr ptr = getCardByNameAndProviderId(cardName, cardNames[cardName]); + for (const auto &cardRef : cardRefs) { + CardInfoPtr ptr = getCard(cardRef); if (ptr) cardInfos.append(ptr); } @@ -138,16 +159,22 @@ QList CardDatabase::getCardsByNameAndProviderId(const QMapgetSets()) { for (const auto &printing : printings) { - if (printing.getProperty("uuid") == providerId) { + if (printing.getProperty("uuid") == cardRef.providerId) { CardInfoPtr cardFromSpecificSet = info->clone(); cardFromSpecificSet->setPixmapCacheKey(QLatin1String("card_") + QString(info->getName()) + QString("_") + QString(printing.getProperty("uuid"))); @@ -163,14 +190,20 @@ CardInfoPtr CardDatabase::getCardBySimpleName(const QString &cardName) const return simpleNameCards.value(CardInfo::simplifyName(cardName)); } -CardInfoPtr CardDatabase::guessCard(const QString &cardName, const QString &providerId) const +/** + * Looks up the CardInfoPtr by CardRef, simplifying the name if required. + * + * @param cardRef The card to look up. If providerId is null, will look up the generic CardInfo for the cardName. + * @return A specific printing of a card, or null if not found. + */ +CardInfoPtr CardDatabase::guessCard(const CardRef &cardRef) const { - CardInfoPtr temp = providerId.isEmpty() ? getCard(cardName) : getCardByNameAndProviderId(cardName, providerId); + CardInfoPtr temp = getCard(cardRef); if (temp == nullptr) { // get card by simple name instead - temp = getCardBySimpleName(cardName); + temp = getCardBySimpleName(cardRef.name); if (temp == nullptr) { // still could not find the card, so simplify the cardName too - const auto &simpleCardName = CardInfo::simplifyName(cardName); + const auto &simpleCardName = CardInfo::simplifyName(cardRef.name); temp = getCardBySimpleName(simpleCardName); } } @@ -293,13 +326,13 @@ void CardDatabase::refreshPreferredPrintings() { for (const CardInfoPtr &card : cards) { card->setPixmapCacheKey(QLatin1String("card_") + QString(card->getName()) + QString("_") + - QString(getPreferredPrintingProviderIdForCard(card->getName()))); + QString(getPreferredPrintingProviderId(card->getName()))); } } PrintingInfo CardDatabase::getPreferredPrinting(const QString &cardName) const { - CardInfoPtr cardInfo = getCard(cardName); + CardInfoPtr cardInfo = getCardInfo(cardName); return getPreferredPrinting(cardInfo); } @@ -335,9 +368,9 @@ PrintingInfo CardDatabase::getPreferredPrinting(const CardInfoPtr &cardInfo) con return PrintingInfo(nullptr); } -PrintingInfo CardDatabase::getSpecificPrinting(const QString &cardName, const QString &providerId) const +PrintingInfo CardDatabase::getSpecificPrinting(const CardRef &cardRef) const { - CardInfoPtr cardInfo = getCard(cardName); + CardInfoPtr cardInfo = getCardInfo(cardRef.name); if (!cardInfo) { return PrintingInfo(nullptr); } @@ -349,14 +382,14 @@ PrintingInfo CardDatabase::getSpecificPrinting(const QString &cardName, const QS for (const auto &printings : setMap) { for (auto &cardInfoForSet : printings) { - if (cardInfoForSet.getProperty("uuid") == providerId) { + if (cardInfoForSet.getProperty("uuid") == cardRef.providerId) { return cardInfoForSet; } } } - if (providerId.isNull()) { - return getPreferredPrinting(cardName); + if (cardRef.providerId.isNull()) { + return getPreferredPrinting(cardRef.name); } return PrintingInfo(nullptr); @@ -366,7 +399,7 @@ PrintingInfo CardDatabase::getSpecificPrinting(const QString &cardName, const QString &setShortName, const QString &collectorNumber) const { - CardInfoPtr cardInfo = getCard(cardName); + CardInfoPtr cardInfo = getCardInfo(cardName); if (!cardInfo) { return PrintingInfo(nullptr); } @@ -394,7 +427,7 @@ PrintingInfo CardDatabase::getSpecificPrinting(const QString &cardName, return PrintingInfo(nullptr); } -QString CardDatabase::getPreferredPrintingProviderIdForCard(const QString &cardName) +QString CardDatabase::getPreferredPrintingProviderId(const QString &cardName) const { PrintingInfo preferredPrinting = getPreferredPrinting(cardName); QString uuid = preferredPrinting.getProperty("uuid"); @@ -402,20 +435,20 @@ QString CardDatabase::getPreferredPrintingProviderIdForCard(const QString &cardN return uuid; } - CardInfoPtr defaultCardInfo = getCard(cardName); + CardInfoPtr defaultCardInfo = getCardInfo(cardName); if (defaultCardInfo.isNull()) { return cardName; } return defaultCardInfo->getName(); } -bool CardDatabase::isProviderIdForPreferredPrinting(const QString &cardName, const QString &providerId) +bool CardDatabase::isPreferredPrinting(const CardRef &cardRef) const { - if (providerId.startsWith("card_")) { - return providerId == - QLatin1String("card_") + cardName + QString("_") + getPreferredPrintingProviderIdForCard(cardName); + if (cardRef.providerId.startsWith("card_")) { + return cardRef.providerId == + QLatin1String("card_") + cardRef.name + QString("_") + getPreferredPrintingProviderId(cardRef.name); } - return providerId == getPreferredPrintingProviderIdForCard(cardName); + return cardRef.providerId == getPreferredPrintingProviderId(cardRef.name); } PrintingInfo CardDatabase::getSetInfoForCard(const CardInfoPtr &_card) diff --git a/cockatrice/src/game/cards/card_database.h b/cockatrice/src/game/cards/card_database.h index bc473cc23..68624a740 100644 --- a/cockatrice/src/game/cards/card_database.h +++ b/cockatrice/src/game/cards/card_database.h @@ -1,6 +1,7 @@ #ifndef CARDDATABASE_H #define CARDDATABASE_H +#include "../common/card_ref.h" #include "card_info.h" #include @@ -65,20 +66,21 @@ public: void clear(); void removeCard(CardInfoPtr card); - [[nodiscard]] CardInfoPtr getCard(const QString &cardName) const; - [[nodiscard]] QList getCards(const QStringList &cardNames) const; - QList getCardsByNameAndProviderId(const QMap &cardNames) const; - [[nodiscard]] CardInfoPtr getCardByNameAndProviderId(const QString &cardName, const QString &providerId) const; + [[nodiscard]] CardInfoPtr getCardInfo(const QString &cardName) const; + [[nodiscard]] QList getCardInfos(const QStringList &cardNames) const; + + QList getCards(const QList &cardRefs) const; + [[nodiscard]] CardInfoPtr getCard(const CardRef &cardRef) const; [[nodiscard]] PrintingInfo getPreferredPrinting(const QString &cardName) const; [[nodiscard]] PrintingInfo getPreferredPrinting(const CardInfoPtr &cardInfo) const; - [[nodiscard]] PrintingInfo getSpecificPrinting(const QString &cardName, const QString &providerId) const; + [[nodiscard]] PrintingInfo getSpecificPrinting(const CardRef &cardRef) const; PrintingInfo getSpecificPrinting(const QString &cardName, const QString &setShortName, const QString &collectorNumber) const; - QString getPreferredPrintingProviderIdForCard(const QString &cardName); - bool isProviderIdForPreferredPrinting(const QString &cardName, const QString &providerId); + QString getPreferredPrintingProviderId(const QString &cardName) const; + bool isPreferredPrinting(const CardRef &cardRef) const; - [[nodiscard]] CardInfoPtr guessCard(const QString &cardName, const QString &providerId = QString()) const; + [[nodiscard]] CardInfoPtr guessCard(const CardRef &cardRef) const; /* * Get a card by its simple name. The name will be simplified in this diff --git a/cockatrice/src/game/deckview/deck_view.cpp b/cockatrice/src/game/deckview/deck_view.cpp index 15a8adcac..1a5c0aea0 100644 --- a/cockatrice/src/game/deckview/deck_view.cpp +++ b/cockatrice/src/game/deckview/deck_view.cpp @@ -67,11 +67,8 @@ void DeckViewCardDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) event->accept(); } -DeckViewCard::DeckViewCard(QGraphicsItem *parent, - const QString &_name, - const QString &_providerId, - const QString &_originZone) - : AbstractCardItem(parent, _name, _providerId, 0, -1), originZone(_originZone), dragItem(0) +DeckViewCard::DeckViewCard(QGraphicsItem *parent, const CardRef &cardRef, const QString &_originZone) + : AbstractCardItem(parent, cardRef, 0, -1), originZone(_originZone), dragItem(0) { setAcceptHoverEvents(true); @@ -362,8 +359,7 @@ void DeckViewScene::rebuildTree() continue; for (int k = 0; k < currentCard->getNumber(); ++k) { - DeckViewCard *newCard = new DeckViewCard(container, currentCard->getName(), - currentCard->getCardProviderId(), currentZone->getName()); + DeckViewCard *newCard = new DeckViewCard(container, currentCard->toCardRef(), currentZone->getName()); container->addCard(newCard); emit newCardAdded(newCard); } diff --git a/cockatrice/src/game/deckview/deck_view.h b/cockatrice/src/game/deckview/deck_view.h index 6fa47766f..2cdfbbe93 100644 --- a/cockatrice/src/game/deckview/deck_view.h +++ b/cockatrice/src/game/deckview/deck_view.h @@ -25,8 +25,7 @@ private: public: explicit DeckViewCard(QGraphicsItem *parent = nullptr, - const QString &_name = QString(), - const QString &_providerId = QString(), + const CardRef &cardRef = {}, const QString &_originZone = QString()); ~DeckViewCard() override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; diff --git a/cockatrice/src/game/deckview/deck_view_container.cpp b/cockatrice/src/game/deckview/deck_view_container.cpp index a5552da44..87ea88b94 100644 --- a/cockatrice/src/game/deckview/deck_view_container.cpp +++ b/cockatrice/src/game/deckview/deck_view_container.cpp @@ -332,8 +332,7 @@ void DeckViewContainer::deckSelectFinished(const Response &r) { const Response_DeckDownload &resp = r.GetExtension(Response_DeckDownload::ext); DeckLoader newDeck(QString::fromStdString(resp.deck())); - PictureLoader::cacheCardPixmaps( - CardDatabaseManager::getInstance()->getCardsByNameAndProviderId(newDeck.getCardListWithProviderId())); + PictureLoader::cacheCardPixmaps(CardDatabaseManager::getInstance()->getCards(newDeck.getCardRefList())); setDeck(newDeck); switchToDeckLoadedView(); } diff --git a/cockatrice/src/game/filters/deck_filter_string.cpp b/cockatrice/src/game/filters/deck_filter_string.cpp index 4d493e5f1..5ce8c8ed5 100644 --- a/cockatrice/src/game/filters/deck_filter_string.cpp +++ b/cockatrice/src/game/filters/deck_filter_string.cpp @@ -118,7 +118,7 @@ static void setupParserRules() return [=](const DeckPreviewWidget *deck, const ExtraDeckSearchInfo &) -> bool { int count = 0; deck->deckLoader->forEachCard([&](InnerDecklistNode *, const DecklistCardNode *node) { - auto cardInfoPtr = CardDatabaseManager::getInstance()->getCard(node->getName()); + auto cardInfoPtr = CardDatabaseManager::getInstance()->getCardInfo(node->getName()); if (!cardInfoPtr.isNull() && cardFilter.check(cardInfoPtr)) { count += node->getNumber(); } diff --git a/cockatrice/src/game/player/player.cpp b/cockatrice/src/game/player/player.cpp index 935670171..9c78db3ac 100644 --- a/cockatrice/src/game/player/player.cpp +++ b/cockatrice/src/game/player/player.cpp @@ -1849,7 +1849,7 @@ void Player::actCreateToken() lastTokenInfo = dlg.getTokenInfo(); - CardInfoPtr correctedCard = CardDatabaseManager::getInstance()->guessCard(lastTokenInfo.name); + CardInfoPtr correctedCard = CardDatabaseManager::getInstance()->guessCard({lastTokenInfo.name}); if (correctedCard) { lastTokenInfo.name = correctedCard->getName(); lastTokenTableRow = TableZone::clampValidTableRow(2 - correctedCard->getTableRow()); @@ -1886,7 +1886,7 @@ void Player::actCreateAnotherToken() void Player::actCreatePredefinedToken() { auto *action = static_cast(sender()); - CardInfoPtr cardInfo = CardDatabaseManager::getInstance()->getCard(action->text()); + CardInfoPtr cardInfo = CardDatabaseManager::getInstance()->getCardInfo(action->text()); if (!cardInfo) { return; } @@ -1912,8 +1912,8 @@ void Player::actCreateRelatedCard() * then let's allow it to be created via "create another token" */ if (createRelatedFromRelation(sourceCard, cardRelation) && cardRelation->getCanCreateAnother()) { - CardInfoPtr cardInfo = CardDatabaseManager::getInstance()->getCardByNameAndProviderId( - cardRelation->getName(), sourceCard->getProviderId()); + CardInfoPtr cardInfo = + CardDatabaseManager::getInstance()->getCard({cardRelation->getName(), sourceCard->getProviderId()}); setLastToken(cardInfo); } } @@ -1993,7 +1993,7 @@ void Player::actCreateAllRelatedCards() * then assign the first to the "Create another" shortcut. */ if (cardRelation != nullptr && cardRelation->getCanCreateAnother()) { - CardInfoPtr cardInfo = CardDatabaseManager::getInstance()->getCard(cardRelation->getName()); + CardInfoPtr cardInfo = CardDatabaseManager::getInstance()->getCardInfo(cardRelation->getName()); setLastToken(cardInfo); } } @@ -2040,7 +2040,7 @@ void Player::createCard(const CardItem *sourceCard, CardRelation::AttachType attachType, bool persistent) { - CardInfoPtr cardInfo = CardDatabaseManager::getInstance()->getCard(dbCardName); + CardInfoPtr cardInfo = CardDatabaseManager::getInstance()->getCardInfo(dbCardName); if (cardInfo == nullptr || sourceCard == nullptr) { return; @@ -2197,7 +2197,7 @@ void Player::eventShuffle(const Event_Shuffle &event) // remove revealed card name on top of decks if (absStart == 0 && !cardList.isEmpty()) { - cardList.first()->setName(""); + cardList.first()->setCardRef({}); zone->update(); } @@ -2253,8 +2253,8 @@ void Player::eventCreateToken(const Event_CreateToken &event) return; } - CardItem *card = new CardItem(this, nullptr, QString::fromStdString(event.card_name()), - QString::fromStdString(event.card_provider_id()), event.card_id()); + CardRef cardRef = {QString::fromStdString(event.card_name()), QString::fromStdString(event.card_provider_id())}; + CardItem *card = new CardItem(this, nullptr, cardRef, event.card_id()); // use db PT if not provided in event and not face-down if (!QString::fromStdString(event.pt()).isEmpty()) { card->setPT(QString::fromStdString(event.pt())); @@ -2392,10 +2392,10 @@ void Player::eventMoveCard(const Event_MoveCard &event, const GameEventContext & card->deleteCardInfoPopup(); } if (event.has_card_name()) { - card->setName(QString::fromStdString(event.card_name())); - } - if (event.has_new_card_provider_id()) { - card->setProviderId(QString::fromStdString(event.new_card_provider_id())); + QString name = QString::fromStdString(event.card_name()); + QString providerId = + event.has_new_card_provider_id() ? QString::fromStdString(event.new_card_provider_id()) : ""; + card->setCardRef({name, providerId}); } if (card->getAttachedTo() && (startZone != targetZone)) { @@ -2555,8 +2555,9 @@ void Player::eventDrawCards(const Event_DrawCards &event) for (int i = 0; i < listSize; ++i) { const ServerInfo_Card &cardInfo = event.cards(i); CardItem *card = _deck->takeCard(0, cardInfo.id()); - card->setProviderId(QString::fromStdString(cardInfo.provider_id())); - card->setName(QString::fromStdString(cardInfo.name())); + QString cardName = QString::fromStdString(cardInfo.name()); + QString providerId = QString::fromStdString(cardInfo.provider_id()); + card->setCardRef({cardName, providerId}); _hand->addCard(card, false, -1); } } else { @@ -2599,11 +2600,12 @@ void Player::eventRevealCards(const Event_RevealCards &event, EventProcessingOpt if (peeking) { for (const auto &card : cardList) { QString cardName = QString::fromStdString(card->name()); + QString providerId = QString::fromStdString(card->provider_id()); CardItem *cardItem = zone->getCard(card->id(), QString()); if (!cardItem) { continue; } - cardItem->setName(cardName); + cardItem->setCardRef({cardName, providerId}); emit logRevealCards(this, zone, card->id(), cardName, this, true, 1); } } else { @@ -2616,8 +2618,8 @@ void Player::eventRevealCards(const Event_RevealCards &event, EventProcessingOpt // Handle case of revealing top card of library in-place if (cardId == 0 && dynamic_cast(zone)) { auto card = zone->getCards().first(); - card->setName(cardName); - card->setProviderId(QString::fromStdString(cardList.first()->provider_id())); + QString providerId = QString::fromStdString(cardList.first()->provider_id()); + card->setCardRef({cardName, providerId}); zone->update(); showZoneView = false; } @@ -4076,7 +4078,7 @@ void Player::addRelatedCardView(const CardItem *card, QMenu *cardMenu) bool atLeastOneGoodRelationFound = false; QList relatedCards = cardInfo->getAllRelatedCards(); for (const CardRelation *cardRelation : relatedCards) { - CardInfoPtr relatedCard = CardDatabaseManager::getInstance()->getCard(cardRelation->getName()); + CardInfoPtr relatedCard = CardDatabaseManager::getInstance()->getCardInfo(cardRelation->getName()); if (relatedCard != nullptr) { atLeastOneGoodRelationFound = true; break; @@ -4096,7 +4098,7 @@ void Player::addRelatedCardView(const CardItem *card, QMenu *cardMenu) QString relatedCardName = relatedCard->getName(); QAction *viewCard = viewRelatedCards->addAction(relatedCardName); connect(viewCard, &QAction::triggered, game, [this, relatedCardName, currentCardSet] { - game->viewCardInfo(relatedCardName, currentCardSet.getProperty("uuid")); + game->viewCardInfo({relatedCardName, currentCardSet.getProperty("uuid")}); }); } } @@ -4122,10 +4124,10 @@ void Player::addRelatedCardActions(const CardItem *card, QMenu *cardMenu) int index = 0; QAction *createRelatedCards = nullptr; for (const CardRelation *cardRelation : relatedCards) { - CardInfoPtr relatedCard = CardDatabaseManager::getInstance()->getCardByNameAndProviderId( - cardRelation->getName(), currentCardSet.getProperty("uuid")); + CardInfoPtr relatedCard = + CardDatabaseManager::getInstance()->getCard({cardRelation->getName(), currentCardSet.getProperty("uuid")}); if (relatedCard == nullptr) { - relatedCard = CardDatabaseManager::getInstance()->getCard(cardRelation->getName()); + relatedCard = CardDatabaseManager::getInstance()->getCardInfo(cardRelation->getName()); } if (relatedCard == nullptr) { continue; diff --git a/cockatrice/src/game/zones/card_zone.cpp b/cockatrice/src/game/zones/card_zone.cpp index 089ed0a2d..671b2607b 100644 --- a/cockatrice/src/game/zones/card_zone.cpp +++ b/cockatrice/src/game/zones/card_zone.cpp @@ -141,8 +141,7 @@ void CardZone::addCard(CardItem *card, const bool reorganize, const int x, const for (auto *view : views) { if (view->prepareAddCard(x)) { - view->addCard(new CardItem(player, nullptr, card->getName(), card->getProviderId(), card->getId()), - reorganize, x, y); + view->addCard(new CardItem(player, nullptr, card->getCardRef(), card->getId()), reorganize, x, y); } } @@ -167,7 +166,8 @@ CardItem *CardZone::getCard(int cardId, const QString &cardName) // It can be assumed that in an invisible zone, all cards are equal. if ((c->getId() == -1) || (c->getName().isEmpty())) { c->setId(cardId); - c->setName(cardName); + // TODO: also set providerId + c->setCardRef({cardName}); } return c; } diff --git a/cockatrice/src/game/zones/hand_zone.cpp b/cockatrice/src/game/zones/hand_zone.cpp index 1bc029432..d645a299e 100644 --- a/cockatrice/src/game/zones/hand_zone.cpp +++ b/cockatrice/src/game/zones/hand_zone.cpp @@ -32,7 +32,7 @@ void HandZone::addCardImpl(CardItem *card, int x, int /*y*/) if (!cards.getContentsKnown()) { card->setId(-1); - card->setName(); + card->setCardRef({}); } card->setParentItem(this); card->resetState(); diff --git a/cockatrice/src/game/zones/pile_zone.cpp b/cockatrice/src/game/zones/pile_zone.cpp index a26499781..d1e97f05f 100644 --- a/cockatrice/src/game/zones/pile_zone.cpp +++ b/cockatrice/src/game/zones/pile_zone.cpp @@ -66,11 +66,11 @@ void PileZone::addCardImpl(CardItem *card, int x, int /*y*/) cards.insert(x, card); card->setPos(0, 0); if (!contentsKnown()) { - card->setName(QString()); + card->setCardRef({}); card->setId(-1); // If we obscure a previously revealed card, its name has to be forgotten if (cards.size() > x + 1) - cards.at(x + 1)->setName(QString()); + cards.at(x + 1)->setCardRef({}); } card->setVisible(false); card->resetState(); diff --git a/cockatrice/src/game/zones/stack_zone.cpp b/cockatrice/src/game/zones/stack_zone.cpp index 324ef55fb..136e59ef1 100644 --- a/cockatrice/src/game/zones/stack_zone.cpp +++ b/cockatrice/src/game/zones/stack_zone.cpp @@ -34,7 +34,7 @@ void StackZone::addCardImpl(CardItem *card, int x, int /*y*/) if (!cards.getContentsKnown()) { card->setId(-1); - card->setName(); + card->setCardRef({}); } card->setParentItem(this); card->resetState(true); diff --git a/cockatrice/src/game/zones/view_zone.cpp b/cockatrice/src/game/zones/view_zone.cpp index fd9387064..90361b7d8 100644 --- a/cockatrice/src/game/zones/view_zone.cpp +++ b/cockatrice/src/game/zones/view_zone.cpp @@ -68,10 +68,11 @@ void ZoneViewZone::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*o void ZoneViewZone::initializeCards(const QList &cardList) { if (!cardList.isEmpty()) { - for (int i = 0; i < cardList.size(); ++i) - addCard(new CardItem(player, this, QString::fromStdString(cardList[i]->name()), - QString::fromStdString(cardList[i]->provider_id()), cardList[i]->id()), - false, i); + for (int i = 0; i < cardList.size(); ++i) { + auto card = cardList[i]; + CardRef cardRef = {QString::fromStdString(card->name()), QString::fromStdString(card->provider_id())}; + addCard(new CardItem(player, this, cardRef, card->id()), false, i); + } reorganizeCards(); } else if (!origZone->contentsKnown()) { Command_DumpZone cmd; @@ -88,7 +89,7 @@ void ZoneViewZone::initializeCards(const QList &cardLis int number = numberCards == -1 ? c.size() : (numberCards < c.size() ? numberCards : c.size()); for (int i = 0; i < number; i++) { CardItem *card = c.at(i); - addCard(new CardItem(player, this, card->getName(), card->getProviderId(), card->getId()), false, i); + addCard(new CardItem(player, this, card->getCardRef(), card->getId()), false, i); } reorganizeCards(); } @@ -102,7 +103,7 @@ void ZoneViewZone::zoneDumpReceived(const Response &r) const ServerInfo_Card &cardInfo = resp.zone_info().card_list(i); auto cardName = QString::fromStdString(cardInfo.name()); auto cardProviderId = QString::fromStdString(cardInfo.provider_id()); - auto *card = new CardItem(player, this, cardName, cardProviderId, cardInfo.id(), this); + auto *card = new CardItem(player, this, {cardName, cardProviderId}, cardInfo.id(), this); cards.insert(i, card); } diff --git a/cockatrice/src/server/chat_view/chat_view.cpp b/cockatrice/src/server/chat_view/chat_view.cpp index f204ea9b4..069797926 100644 --- a/cockatrice/src/server/chat_view/chat_view.cpp +++ b/cockatrice/src/server/chat_view/chat_view.cpp @@ -582,9 +582,9 @@ void ChatView::mousePressEvent(QMouseEvent *event) case HoveredCard: { if ((event->button() == Qt::MiddleButton) || (event->button() == Qt::LeftButton)) #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) - emit showCardInfoPopup(event->globalPosition().toPoint(), hoveredContent, QString()); + emit showCardInfoPopup(event->globalPosition().toPoint(), {hoveredContent}); #else - emit showCardInfoPopup(event->globalPos(), hoveredContent, QString()); + emit showCardInfoPopup(event->globalPos(), {hoveredContent}); #endif break; } diff --git a/cockatrice/src/server/chat_view/chat_view.h b/cockatrice/src/server/chat_view/chat_view.h index 586ba90b3..02e73b789 100644 --- a/cockatrice/src/server/chat_view/chat_view.h +++ b/cockatrice/src/server/chat_view/chat_view.h @@ -109,7 +109,7 @@ protected: signals: void openMessageDialog(const QString &userName, bool focus); void cardNameHovered(QString cardName); - void showCardInfoPopup(const QPoint &pos, const QString &cardName, const QString &providerId); + void showCardInfoPopup(const QPoint &pos, const CardRef &cardRef); void deleteCardInfoPopup(QString cardName); void addMentionTag(QString mentionTag); void messageClickedSignal(); diff --git a/cockatrice/src/settings/card_override_settings.cpp b/cockatrice/src/settings/card_override_settings.cpp index c3331fd0a..2e2c7607d 100644 --- a/cockatrice/src/settings/card_override_settings.cpp +++ b/cockatrice/src/settings/card_override_settings.cpp @@ -5,9 +5,9 @@ CardOverrideSettings::CardOverrideSettings(const QString &settingPath, QObject * { } -void CardOverrideSettings::setCardPreferenceOverride(const QString &cardName, const QString &providerId) +void CardOverrideSettings::setCardPreferenceOverride(const CardRef &cardRef) { - setValue(providerId, cardName, "cards"); + setValue(cardRef.providerId, cardRef.name, "cards"); } void CardOverrideSettings::deleteCardPreferenceOverride(const QString &cardName) diff --git a/cockatrice/src/settings/card_override_settings.h b/cockatrice/src/settings/card_override_settings.h index dae3e4daf..520d9f65f 100644 --- a/cockatrice/src/settings/card_override_settings.h +++ b/cockatrice/src/settings/card_override_settings.h @@ -1,6 +1,7 @@ #ifndef COCKATRICE_CARD_OVERRIDE_SETTINGS_H #define COCKATRICE_CARD_OVERRIDE_SETTINGS_H +#include "../common/card_ref.h" #include "settings_manager.h" #include @@ -11,7 +12,7 @@ class CardOverrideSettings : public SettingsManager friend class SettingsCache; public: - void setCardPreferenceOverride(const QString &cardName, const QString &providerId); + void setCardPreferenceOverride(const CardRef &cardRef); void deleteCardPreferenceOverride(const QString &cardName); diff --git a/common/card_ref.h b/common/card_ref.h new file mode 100644 index 000000000..d29eee0bb --- /dev/null +++ b/common/card_ref.h @@ -0,0 +1,24 @@ +#ifndef CARD_REF_H +#define CARD_REF_H + +#include + +/** + * The information passed over the server that is required to identify the exact card to display. + * + * @param name The name of the card. Should not be empty, unless to indicate the lack of a card. + * @param providerId Determines which printing of the card to use. Can be empty, in which case Cockatrice should default + * to using the preferred set. + */ +struct CardRef +{ + QString name; + QString providerId = QString(); + + bool operator==(const CardRef &other) const + { + return name == other.name && providerId == other.providerId; + } +}; + +#endif // CARD_REF_H diff --git a/common/decklist.cpp b/common/decklist.cpp index a9a825592..8efdeb572 100644 --- a/common/decklist.cpp +++ b/common/decklist.cpp @@ -424,7 +424,7 @@ bool DeckList::readElement(QXmlStreamReader *xml) } else if (childName == "bannerCard") { QString providerId = xml->attributes().value("providerId").toString(); QString cardName = xml->readElementText(); - bannerCard = QPair(cardName, providerId); + bannerCard = {cardName, providerId}; } else if (childName == "tags") { tags.clear(); // Clear existing tags while (xml->readNextStartElement()) { @@ -456,8 +456,8 @@ void DeckList::write(QXmlStreamWriter *xml) const xml->writeTextElement("lastLoadedTimestamp", lastLoadedTimestamp); xml->writeTextElement("deckname", name); xml->writeStartElement("bannerCard"); - xml->writeAttribute("providerId", bannerCard.second); - xml->writeCharacters(bannerCard.first); + xml->writeAttribute("providerId", bannerCard.providerId); + xml->writeCharacters(bannerCard.name); xml->writeEndElement(); xml->writeTextElement("comments", comments); @@ -805,7 +805,7 @@ void DeckList::cleanList(bool preserveMetadata) refreshDeckHash(); } -void DeckList::getCardListHelper(InnerDecklistNode *item, QSet &result) const +void DeckList::getCardListHelper(InnerDecklistNode *item, QSet &result) { for (int i = 0; i < item->size(); ++i) { auto *node = dynamic_cast(item->at(i)); @@ -818,15 +818,15 @@ void DeckList::getCardListHelper(InnerDecklistNode *item, QSet &result) } } -void DeckList::getCardListWithProviderIdHelper(InnerDecklistNode *item, QMap &result) const +void DeckList::getCardRefListHelper(InnerDecklistNode *item, QList &result) { for (int i = 0; i < item->size(); ++i) { auto *node = dynamic_cast(item->at(i)); if (node) { - result.insert(node->getName(), node->getCardProviderId()); + result.append(node->toCardRef()); } else { - getCardListWithProviderIdHelper(dynamic_cast(item->at(i)), result); + getCardRefListHelper(dynamic_cast(item->at(i)), result); } } } @@ -838,10 +838,10 @@ QStringList DeckList::getCardList() const return result.values(); } -QMap DeckList::getCardListWithProviderId() const +QList DeckList::getCardRefList() const { - QMap result; - getCardListWithProviderIdHelper(root, result); + QList result; + getCardRefListHelper(root, result); return result; } diff --git a/common/decklist.h b/common/decklist.h index d7ed4add4..5e90ab180 100644 --- a/common/decklist.h +++ b/common/decklist.h @@ -1,6 +1,8 @@ #ifndef DECKLIST_H #define DECKLIST_H +#include "card_ref.h" + #include #include @@ -246,6 +248,10 @@ public: { return false; } + CardRef toCardRef() const + { + return {name, cardProviderId}; + } }; class DeckList : public QObject @@ -253,13 +259,13 @@ class DeckList : public QObject Q_OBJECT private: QString name, comments; - QPair bannerCard; + CardRef bannerCard; QString lastLoadedTimestamp; QStringList tags; QMap sideboardPlans; InnerDecklistNode *root; - void getCardListHelper(InnerDecklistNode *node, QSet &result) const; - void getCardListWithProviderIdHelper(InnerDecklistNode *item, QMap &result) const; + static void getCardListHelper(InnerDecklistNode *node, QSet &result); + static void getCardRefListHelper(InnerDecklistNode *item, QList &result); InnerDecklistNode *getZoneObjFromName(const QString &zoneName); /** @@ -305,7 +311,7 @@ public slots: tags.clear(); emit deckTagsChanged(); } - void setBannerCard(const QPair &_bannerCard = QPair()) + void setBannerCard(const CardRef &_bannerCard = {}) { bannerCard = _bannerCard; } @@ -331,7 +337,7 @@ public: { return tags; } - QPair getBannerCard() const + CardRef getBannerCard() const { return bannerCard; } @@ -365,7 +371,7 @@ public: return root->isEmpty() && name.isEmpty() && comments.isEmpty() && sideboardPlans.isEmpty(); } QStringList getCardList() const; - QMap getCardListWithProviderId() const; + QList getCardRefList() const; int getSideboardSize() const; diff --git a/common/server_card.cpp b/common/server_card.cpp index 0edbae937..323b4d827 100644 --- a/common/server_card.cpp +++ b/common/server_card.cpp @@ -27,15 +27,9 @@ #include -Server_Card::Server_Card(QString _name, - QString _provider_id, - int _id, - int _coord_x, - int _coord_y, - Server_CardZone *_zone) - : zone(_zone), id(_id), coord_x(_coord_x), coord_y(_coord_y), name(_name), provider_id(_provider_id), tapped(false), - attacking(false), facedown(false), color(), ptString(), annotation(), destroyOnZoneChange(false), - doesntUntap(false), parentCard(0), stashedCard(nullptr) +Server_Card::Server_Card(const CardRef &cardRef, int _id, int _coord_x, int _coord_y, Server_CardZone *_zone) + : zone(_zone), id(_id), coord_x(_coord_x), coord_y(_coord_y), cardRef(cardRef), tapped(false), attacking(false), + facedown(false), destroyOnZoneChange(false), doesntUntap(false), parentCard(0), stashedCard(nullptr) { } @@ -134,10 +128,10 @@ void Server_Card::setParentCard(Server_Card *_parentCard) void Server_Card::getInfo(ServerInfo_Card *info) { - QString displayedName = facedown ? QString() : name; + QString displayedName = facedown ? QString() : cardRef.name; info->set_id(id); - info->set_provider_id(provider_id.toStdString()); + info->set_provider_id(cardRef.providerId.toStdString()); info->set_name(displayedName.toStdString()); info->set_x(coord_x); info->set_y(coord_y); diff --git a/common/server_card.h b/common/server_card.h index 4529e08cd..d96b9d056 100644 --- a/common/server_card.h +++ b/common/server_card.h @@ -20,6 +20,7 @@ #ifndef SERVER_CARD_H #define SERVER_CARD_H +#include "card_ref.h" #include "pb/card_attributes.pb.h" #include "pb/serverinfo_card.pb.h" #include "server_arrowtarget.h" @@ -38,8 +39,7 @@ private: Server_CardZone *zone; int id; int coord_x, coord_y; - QString name; - QString provider_id; + CardRef cardRef; QMap counters; bool tapped; bool attacking; @@ -55,12 +55,7 @@ private: Server_Card *stashedCard; public: - Server_Card(QString _name, - QString _provider_id, - int _id, - int _coord_x, - int _coord_y, - Server_CardZone *_zone = nullptr); + Server_Card(const CardRef &cardRef, int _id, int _coord_x, int _coord_y, Server_CardZone *_zone = nullptr); ~Server_Card() override; Server_CardZone *getZone() const @@ -76,9 +71,13 @@ public: { return id; } + CardRef getCardRef() const + { + return cardRef; + } QString getProviderId() const { - return provider_id; + return cardRef.providerId; } int getX() const { @@ -90,7 +89,7 @@ public: } QString getName() const { - return name; + return cardRef.name; } const QMap &getCounters() const { @@ -150,9 +149,9 @@ public: coord_x = x; coord_y = y; } - void setName(const QString &_name) + void setCardRef(const CardRef &_cardRef) { - name = _name; + cardRef = _cardRef; } void setCounter(int _id, int value, Event_SetCardCounter *event = nullptr); void setTapped(bool _tapped) diff --git a/common/server_player.cpp b/common/server_player.cpp index 13a5405a6..989f7706e 100644 --- a/common/server_player.cpp +++ b/common/server_player.cpp @@ -210,9 +210,7 @@ void Server_Player::setupZones() continue; } for (int k = 0; k < currentCard->getNumber(); ++k) { - z->insertCard( - new Server_Card(currentCard->getName(), currentCard->getCardProviderId(), nextCardId++, 0, 0, z), - -1, 0); + z->insertCard(new Server_Card(currentCard->toCardRef(), nextCardId++, 0, 0, z), -1, 0); } } } @@ -1517,7 +1515,7 @@ Server_Player::cmdCreateToken(const Command_CreateToken &cmd, ResponseContainer yCoord = 0; } - auto *card = new Server_Card(cardName, cardProviderId, newCardId(), xCoord, yCoord); + auto *card = new Server_Card({cardName, cardProviderId}, newCardId(), xCoord, yCoord); card->moveToThread(thread()); // Client should already prevent face-down tokens from having attributes; this just an extra server-side check if (!cmd.face_down()) { diff --git a/dbconverter/CMakeLists.txt b/dbconverter/CMakeLists.txt index ca661376e..a51a6d734 100644 --- a/dbconverter/CMakeLists.txt +++ b/dbconverter/CMakeLists.txt @@ -26,6 +26,9 @@ elseif(Qt5_FOUND) ) endif() +# Include directories +include_directories(../common) # Required due to card_ref.h + # Build servatrice binary and link it add_executable(dbconverter MACOSX_BUNDLE ${dbconverter_MOC_SRCS} ${dbconverter_SOURCES}) diff --git a/oracle/CMakeLists.txt b/oracle/CMakeLists.txt index d474a5de8..79d2ae45a 100644 --- a/oracle/CMakeLists.txt +++ b/oracle/CMakeLists.txt @@ -79,6 +79,7 @@ elseif(Qt5_FOUND) endif() include_directories(../cockatrice/src) +include_directories(../common) # Libz is required to support zipped files find_package(ZLIB) diff --git a/tests/carddatabase/CMakeLists.txt b/tests/carddatabase/CMakeLists.txt index 403d14d1d..1f9139ff6 100644 --- a/tests/carddatabase/CMakeLists.txt +++ b/tests/carddatabase/CMakeLists.txt @@ -49,8 +49,8 @@ if(NOT GTEST_FOUND) add_dependencies(filter_string_test gtest) endif() -target_link_libraries(carddatabase_test Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES}) -target_link_libraries(filter_string_test Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES}) +target_link_libraries(carddatabase_test cockatrice_common Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES}) +target_link_libraries(filter_string_test cockatrice_common Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES}) add_test(NAME carddatabase_test COMMAND carddatabase_test) add_test(NAME filter_string_test COMMAND filter_string_test)