mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-02 03:23:56 -07:00
[DeckLoader] Extract cardNode functions to own file (#6408)
* [DeckLoader] Extract cardNode functions to own file * update usages
This commit is contained in:
parent
c8b419888a
commit
2b690f8c87
10 changed files with 94 additions and 112 deletions
|
|
@ -19,6 +19,7 @@ set(cockatrice_SOURCES
|
||||||
src/client/settings/card_counter_settings.cpp
|
src/client/settings/card_counter_settings.cpp
|
||||||
src/client/settings/shortcut_treeview.cpp
|
src/client/settings/shortcut_treeview.cpp
|
||||||
src/client/settings/shortcuts_settings.cpp
|
src/client/settings/shortcuts_settings.cpp
|
||||||
|
src/interface/deck_loader/card_node_function.cpp
|
||||||
src/interface/deck_loader/deck_file_format.cpp
|
src/interface/deck_loader/deck_file_format.cpp
|
||||||
src/interface/deck_loader/deck_loader.cpp
|
src/interface/deck_loader/deck_loader.cpp
|
||||||
src/interface/deck_loader/loaded_deck.cpp
|
src/interface/deck_loader/loaded_deck.cpp
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,8 @@
|
||||||
|
|
||||||
#ifndef INTERFACE_JSON_DECK_PARSER_H
|
#ifndef INTERFACE_JSON_DECK_PARSER_H
|
||||||
#define INTERFACE_JSON_DECK_PARSER_H
|
#define INTERFACE_JSON_DECK_PARSER_H
|
||||||
|
|
||||||
|
#include "../../../interface/deck_loader/card_node_function.h"
|
||||||
#include "../../../interface/deck_loader/deck_loader.h"
|
#include "../../../interface/deck_loader/deck_loader.h"
|
||||||
|
|
||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
|
|
@ -48,7 +50,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
loader->getDeckList()->loadFromStream_Plain(outStream, false);
|
loader->getDeckList()->loadFromStream_Plain(outStream, false);
|
||||||
DeckLoader::resolveSetNameAndNumberToProviderID(loader->getDeckList());
|
loader->getDeckList()->forEachCard(CardNodeFunction::ResolveProviderId());
|
||||||
|
|
||||||
return loader;
|
return loader;
|
||||||
}
|
}
|
||||||
|
|
@ -95,7 +97,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
loader->getDeckList()->loadFromStream_Plain(outStream, false);
|
loader->getDeckList()->loadFromStream_Plain(outStream, false);
|
||||||
DeckLoader::resolveSetNameAndNumberToProviderID(loader->getDeckList());
|
loader->getDeckList()->forEachCard(CardNodeFunction::ResolveProviderId());
|
||||||
|
|
||||||
QJsonObject commandersObj = obj.value("commanders").toObject();
|
QJsonObject commandersObj = obj.value("commanders").toObject();
|
||||||
if (!commandersObj.isEmpty()) {
|
if (!commandersObj.isEmpty()) {
|
||||||
|
|
|
||||||
40
cockatrice/src/interface/deck_loader/card_node_function.cpp
Normal file
40
cockatrice/src/interface/deck_loader/card_node_function.cpp
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
#include "card_node_function.h"
|
||||||
|
|
||||||
|
#include <libcockatrice/card/database/card_database.h>
|
||||||
|
#include <libcockatrice/card/database/card_database_manager.h>
|
||||||
|
#include <libcockatrice/deck_list/tree/deck_list_card_node.h>
|
||||||
|
|
||||||
|
void CardNodeFunction::SetProviderIdToPreferred::operator()(const InnerDecklistNode *node, DecklistCardNode *card) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(node);
|
||||||
|
PrintingInfo preferredPrinting = CardDatabaseManager::query()->getPreferredPrinting(card->getName());
|
||||||
|
QString providerId = preferredPrinting.getUuid();
|
||||||
|
QString setShortName = preferredPrinting.getSet()->getShortName();
|
||||||
|
QString collectorNumber = preferredPrinting.getProperty("num");
|
||||||
|
|
||||||
|
card->setCardProviderId(providerId);
|
||||||
|
card->setCardCollectorNumber(collectorNumber);
|
||||||
|
card->setCardSetShortName(setShortName);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CardNodeFunction::ClearPrintingData::operator()(const InnerDecklistNode *node, DecklistCardNode *card) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(node);
|
||||||
|
card->setCardSetShortName(nullptr);
|
||||||
|
card->setCardCollectorNumber(nullptr);
|
||||||
|
card->setCardProviderId(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CardNodeFunction::ResolveProviderId::operator()(const InnerDecklistNode *node, DecklistCardNode *card) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(node);
|
||||||
|
// Retrieve the providerId based on setName and collectorNumber
|
||||||
|
QString providerId =
|
||||||
|
CardDatabaseManager::getInstance()
|
||||||
|
->query()
|
||||||
|
->getSpecificPrinting(card->getName(), card->getCardSetShortName(), card->getCardCollectorNumber())
|
||||||
|
.getUuid();
|
||||||
|
|
||||||
|
// Set the providerId on the card
|
||||||
|
card->setCardProviderId(providerId);
|
||||||
|
}
|
||||||
39
cockatrice/src/interface/deck_loader/card_node_function.h
Normal file
39
cockatrice/src/interface/deck_loader/card_node_function.h
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
#ifndef COCKATRICE_DECK_FUNCTION_H
|
||||||
|
#define COCKATRICE_DECK_FUNCTION_H
|
||||||
|
|
||||||
|
class DecklistCardNode;
|
||||||
|
class InnerDecklistNode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Functions to be used with DeckList::forEachCard
|
||||||
|
*/
|
||||||
|
namespace CardNodeFunction
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Sets the providerId of the card to the preferred printing.
|
||||||
|
*/
|
||||||
|
struct SetProviderIdToPreferred
|
||||||
|
{
|
||||||
|
void operator()(const InnerDecklistNode *node, DecklistCardNode *card) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clears all fields on the card related to the printing
|
||||||
|
*/
|
||||||
|
struct ClearPrintingData
|
||||||
|
{
|
||||||
|
void operator()(const InnerDecklistNode *node, DecklistCardNode *card) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Sets the providerId of the card based on its set name and collector number.
|
||||||
|
*/
|
||||||
|
struct ResolveProviderId
|
||||||
|
{
|
||||||
|
void operator()(const InnerDecklistNode *node, DecklistCardNode *card) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace CardNodeFunction
|
||||||
|
|
||||||
|
#endif // COCKATRICE_DECK_FUNCTION_H
|
||||||
|
|
@ -316,104 +316,6 @@ QString DeckLoader::exportDeckToDecklist(const DeckList *deckList, DecklistWebsi
|
||||||
return deckString;
|
return deckString;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This struct is here to support the forEachCard function call, defined in decklist.
|
|
||||||
// It requires a function to be called for each card, and it will set the providerId to the preferred printing.
|
|
||||||
struct SetProviderIdToPreferred
|
|
||||||
{
|
|
||||||
// Main operator for struct, allowing the foreachcard to work.
|
|
||||||
SetProviderIdToPreferred()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void operator()(const InnerDecklistNode *node, DecklistCardNode *card) const
|
|
||||||
{
|
|
||||||
Q_UNUSED(node);
|
|
||||||
PrintingInfo preferredPrinting = CardDatabaseManager::query()->getPreferredPrinting(card->getName());
|
|
||||||
QString providerId = preferredPrinting.getUuid();
|
|
||||||
QString setShortName = preferredPrinting.getSet()->getShortName();
|
|
||||||
QString collectorNumber = preferredPrinting.getProperty("num");
|
|
||||||
|
|
||||||
card->setCardProviderId(providerId);
|
|
||||||
card->setCardCollectorNumber(collectorNumber);
|
|
||||||
card->setCardSetShortName(setShortName);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function iterates through each card in the decklist and sets the providerId
|
|
||||||
* on each card based on its set name and collector number.
|
|
||||||
*
|
|
||||||
* @param deckList The decklist to modify
|
|
||||||
*/
|
|
||||||
void DeckLoader::setProviderIdToPreferredPrinting(const DeckList *deckList)
|
|
||||||
{
|
|
||||||
// Set up the struct to call.
|
|
||||||
SetProviderIdToPreferred setProviderIdToPreferred;
|
|
||||||
|
|
||||||
// Call the forEachCard method for each card in the deck
|
|
||||||
deckList->forEachCard(setProviderIdToPreferred);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the providerId on each card in the decklist based on its set name and collector number.
|
|
||||||
*
|
|
||||||
* @param deckList The decklist to modify
|
|
||||||
*/
|
|
||||||
void DeckLoader::resolveSetNameAndNumberToProviderID(const DeckList *deckList)
|
|
||||||
{
|
|
||||||
auto setProviderId = [](const auto node, const auto card) {
|
|
||||||
Q_UNUSED(node);
|
|
||||||
// Retrieve the providerId based on setName and collectorNumber
|
|
||||||
QString providerId =
|
|
||||||
CardDatabaseManager::getInstance()
|
|
||||||
->query()
|
|
||||||
->getSpecificPrinting(card->getName(), card->getCardSetShortName(), card->getCardCollectorNumber())
|
|
||||||
.getUuid();
|
|
||||||
|
|
||||||
// Set the providerId on the card
|
|
||||||
card->setCardProviderId(providerId);
|
|
||||||
};
|
|
||||||
|
|
||||||
deckList->forEachCard(setProviderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
// This struct is here to support the forEachCard function call, defined in decklist.
|
|
||||||
// It requires a function to be called for each card, and it will set the providerId.
|
|
||||||
struct ClearSetNameNumberAndProviderId
|
|
||||||
{
|
|
||||||
// Main operator for struct, allowing the foreachcard to work.
|
|
||||||
ClearSetNameNumberAndProviderId()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void operator()(const InnerDecklistNode *node, DecklistCardNode *card) const
|
|
||||||
{
|
|
||||||
Q_UNUSED(node);
|
|
||||||
// Set the providerId on the card
|
|
||||||
card->setCardSetShortName(nullptr);
|
|
||||||
card->setCardCollectorNumber(nullptr);
|
|
||||||
card->setCardProviderId(nullptr);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clears the set name and numbers on each card in the decklist.
|
|
||||||
*
|
|
||||||
* @param deckList The decklist to modify
|
|
||||||
*/
|
|
||||||
void DeckLoader::clearSetNamesAndNumbers(const DeckList *deckList)
|
|
||||||
{
|
|
||||||
auto clearSetNameAndNumber = [](const auto node, auto card) {
|
|
||||||
Q_UNUSED(node)
|
|
||||||
// Set the providerId on the card
|
|
||||||
card->setCardSetShortName(nullptr);
|
|
||||||
card->setCardCollectorNumber(nullptr);
|
|
||||||
card->setCardProviderId(nullptr);
|
|
||||||
};
|
|
||||||
|
|
||||||
deckList->forEachCard(clearSetNameAndNumber);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DeckLoader::saveToClipboard(const DeckList *deckList, bool addComments, bool addSetNameAndNumber)
|
void DeckLoader::saveToClipboard(const DeckList *deckList, bool addComments, bool addSetNameAndNumber)
|
||||||
{
|
{
|
||||||
QString buffer;
|
QString buffer;
|
||||||
|
|
|
||||||
|
|
@ -65,8 +65,6 @@ public:
|
||||||
return lastLoadInfo.isEmpty();
|
return lastLoadInfo.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void clearSetNamesAndNumbers(const DeckList *deckList);
|
|
||||||
|
|
||||||
bool loadFromFile(const QString &fileName, DeckFileFormat::Format fmt, bool userRequest = false);
|
bool loadFromFile(const QString &fileName, DeckFileFormat::Format fmt, bool userRequest = false);
|
||||||
bool loadFromFileAsync(const QString &fileName, DeckFileFormat::Format fmt, bool userRequest);
|
bool loadFromFileAsync(const QString &fileName, DeckFileFormat::Format fmt, bool userRequest);
|
||||||
bool loadFromRemote(const QString &nativeString, int remoteDeckId);
|
bool loadFromRemote(const QString &nativeString, int remoteDeckId);
|
||||||
|
|
@ -75,9 +73,6 @@ public:
|
||||||
|
|
||||||
static QString exportDeckToDecklist(const DeckList *deckList, DecklistWebsite website);
|
static QString exportDeckToDecklist(const DeckList *deckList, DecklistWebsite website);
|
||||||
|
|
||||||
static void setProviderIdToPreferredPrinting(const DeckList *deckList);
|
|
||||||
static void resolveSetNameAndNumberToProviderID(const DeckList *deckList);
|
|
||||||
|
|
||||||
static void saveToClipboard(const DeckList *deckList, bool addComments = true, bool addSetNameAndNumber = true);
|
static void saveToClipboard(const DeckList *deckList, bool addComments = true, bool addSetNameAndNumber = true);
|
||||||
static bool saveToStream_Plain(QTextStream &out,
|
static bool saveToStream_Plain(QTextStream &out,
|
||||||
const DeckList *deckList,
|
const DeckList *deckList,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#include "dlg_load_deck_from_clipboard.h"
|
#include "dlg_load_deck_from_clipboard.h"
|
||||||
|
|
||||||
#include "../../../client/settings/cache_settings.h"
|
#include "../../../client/settings/cache_settings.h"
|
||||||
|
#include "../../deck_loader/card_node_function.h"
|
||||||
#include "../../deck_loader/deck_loader.h"
|
#include "../../deck_loader/deck_loader.h"
|
||||||
#include "dlg_settings.h"
|
#include "dlg_settings.h"
|
||||||
|
|
||||||
|
|
@ -82,9 +83,9 @@ bool AbstractDlgDeckTextEdit::loadIntoDeck(DeckLoader *deckLoader) const
|
||||||
|
|
||||||
if (deckLoader->getDeckList()->loadFromStream_Plain(stream, true)) {
|
if (deckLoader->getDeckList()->loadFromStream_Plain(stream, true)) {
|
||||||
if (loadSetNameAndNumberCheckBox->isChecked()) {
|
if (loadSetNameAndNumberCheckBox->isChecked()) {
|
||||||
DeckLoader::resolveSetNameAndNumberToProviderID(deckLoader->getDeckList());
|
deckLoader->getDeckList()->forEachCard(CardNodeFunction::ResolveProviderId());
|
||||||
} else {
|
} else {
|
||||||
DeckLoader::clearSetNamesAndNumbers(deckLoader->getDeckList());
|
deckLoader->getDeckList()->forEachCard(CardNodeFunction::ClearPrintingData());
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ void DlgLoadDeckFromWebsite::accept()
|
||||||
DeckLoader *loader = new DeckLoader(this);
|
DeckLoader *loader = new DeckLoader(this);
|
||||||
QTextStream stream(&deckText);
|
QTextStream stream(&deckText);
|
||||||
loader->getDeckList()->loadFromStream_Plain(stream, false);
|
loader->getDeckList()->loadFromStream_Plain(stream, false);
|
||||||
DeckLoader::resolveSetNameAndNumberToProviderID(loader->getDeckList());
|
loader->getDeckList()->forEachCard(CardNodeFunction::ResolveProviderId());
|
||||||
deck = loader;
|
deck = loader;
|
||||||
|
|
||||||
QDialog::accept();
|
QDialog::accept();
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
#include "dlg_select_set_for_cards.h"
|
#include "dlg_select_set_for_cards.h"
|
||||||
|
|
||||||
|
#include "../../deck_loader/card_node_function.h"
|
||||||
#include "../../deck_loader/deck_loader.h"
|
#include "../../deck_loader/deck_loader.h"
|
||||||
#include "../interface/widgets/cards/card_info_picture_widget.h"
|
#include "../interface/widgets/cards/card_info_picture_widget.h"
|
||||||
#include "../interface/widgets/general/layout_containers/flow_widget.h"
|
#include "../interface/widgets/general/layout_containers/flow_widget.h"
|
||||||
|
|
@ -177,7 +178,7 @@ void DlgSelectSetForCards::actOK()
|
||||||
void DlgSelectSetForCards::actClear()
|
void DlgSelectSetForCards::actClear()
|
||||||
{
|
{
|
||||||
emit deckAboutToBeModified(tr("Cleared all printing information."));
|
emit deckAboutToBeModified(tr("Cleared all printing information."));
|
||||||
DeckLoader::clearSetNamesAndNumbers(model->getDeckList());
|
model->getDeckList()->forEachCard(CardNodeFunction::ClearPrintingData());
|
||||||
emit deckModified();
|
emit deckModified();
|
||||||
accept();
|
accept();
|
||||||
}
|
}
|
||||||
|
|
@ -185,8 +186,8 @@ void DlgSelectSetForCards::actClear()
|
||||||
void DlgSelectSetForCards::actSetAllToPreferred()
|
void DlgSelectSetForCards::actSetAllToPreferred()
|
||||||
{
|
{
|
||||||
emit deckAboutToBeModified(tr("Set all printings to preferred."));
|
emit deckAboutToBeModified(tr("Set all printings to preferred."));
|
||||||
DeckLoader::clearSetNamesAndNumbers(model->getDeckList());
|
model->getDeckList()->forEachCard(CardNodeFunction::ClearPrintingData());
|
||||||
DeckLoader::setProviderIdToPreferredPrinting(model->getDeckList());
|
model->getDeckList()->forEachCard(CardNodeFunction::SetProviderIdToPreferred());
|
||||||
emit deckModified();
|
emit deckModified();
|
||||||
accept();
|
accept();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
#include "archidekt_api_response_deck_display_widget.h"
|
#include "archidekt_api_response_deck_display_widget.h"
|
||||||
|
|
||||||
|
#include "../../../../../deck_loader/card_node_function.h"
|
||||||
#include "../../../../../deck_loader/deck_loader.h"
|
#include "../../../../../deck_loader/deck_loader.h"
|
||||||
#include "../../../../cards/card_info_picture_with_text_overlay_widget.h"
|
#include "../../../../cards/card_info_picture_with_text_overlay_widget.h"
|
||||||
#include "../../../../cards/card_size_widget.h"
|
#include "../../../../cards/card_size_widget.h"
|
||||||
|
|
@ -68,7 +69,7 @@ ArchidektApiResponseDeckDisplayWidget::ArchidektApiResponseDeckDisplayWidget(QWi
|
||||||
connect(model, &DeckListModel::modelReset, this, &ArchidektApiResponseDeckDisplayWidget::decklistModelReset);
|
connect(model, &DeckListModel::modelReset, this, &ArchidektApiResponseDeckDisplayWidget::decklistModelReset);
|
||||||
model->getDeckList()->loadFromStream_Plain(deckStream, false);
|
model->getDeckList()->loadFromStream_Plain(deckStream, false);
|
||||||
|
|
||||||
DeckLoader::resolveSetNameAndNumberToProviderID(model->getDeckList());
|
model->getDeckList()->forEachCard(CardNodeFunction::ResolveProviderId());
|
||||||
|
|
||||||
model->rebuildTree();
|
model->rebuildTree();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue