mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-04 12:33:55 -07:00
Cache correct providerId cards on deck load (#5668)
* Implement new method for DeckList to return cardlist with providerId, a new carddatabase method to fetch a cardlist with name and providerId and changed PictureLoader to use providerId versions of cards for caching. --------- Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
parent
7ff43f15fc
commit
3620664a9f
7 changed files with 41 additions and 5 deletions
|
|
@ -131,7 +131,8 @@ void AbstractTabDeckEditor::actSwapCard(CardInfoPtr info, QString zoneName)
|
||||||
void AbstractTabDeckEditor::setDeck(DeckLoader *_deck)
|
void AbstractTabDeckEditor::setDeck(DeckLoader *_deck)
|
||||||
{
|
{
|
||||||
deckDockWidget->setDeck(_deck);
|
deckDockWidget->setDeck(_deck);
|
||||||
PictureLoader::cacheCardPixmaps(CardDatabaseManager::getInstance()->getCards(getDeckList()->getCardList()));
|
PictureLoader::cacheCardPixmaps(
|
||||||
|
CardDatabaseManager::getInstance()->getCardsByNameAndProviderId(getDeckList()->getCardListWithProviderId()));
|
||||||
setModified(false);
|
setModified(false);
|
||||||
|
|
||||||
// If they load a deck, make the deck list appear
|
// If they load a deck, make the deck list appear
|
||||||
|
|
|
||||||
|
|
@ -929,8 +929,8 @@ void TabGame::eventGameStateChanged(const Event_GameStateChanged &event,
|
||||||
DeckViewContainer *deckViewContainer = deckViewContainers.value(playerId);
|
DeckViewContainer *deckViewContainer = deckViewContainers.value(playerId);
|
||||||
if (playerInfo.has_deck_list()) {
|
if (playerInfo.has_deck_list()) {
|
||||||
DeckLoader newDeck(QString::fromStdString(playerInfo.deck_list()));
|
DeckLoader newDeck(QString::fromStdString(playerInfo.deck_list()));
|
||||||
PictureLoader::cacheCardPixmaps(
|
PictureLoader::cacheCardPixmaps(CardDatabaseManager::getInstance()->getCardsByNameAndProviderId(
|
||||||
CardDatabaseManager::getInstance()->getCards(newDeck.getCardList()));
|
newDeck.getCardListWithProviderId()));
|
||||||
deckViewContainer->setDeck(newDeck);
|
deckViewContainer->setDeck(newDeck);
|
||||||
player->setDeck(newDeck);
|
player->setDeck(newDeck);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -477,6 +477,18 @@ QList<CardInfoPtr> CardDatabase::getCards(const QStringList &cardNames) const
|
||||||
return cardInfos;
|
return cardInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<CardInfoPtr> CardDatabase::getCardsByNameAndProviderId(const QMap<QString, QString> &cardNames) const
|
||||||
|
{
|
||||||
|
QList<CardInfoPtr> cardInfos;
|
||||||
|
for (const QString &cardName : cardNames) {
|
||||||
|
CardInfoPtr ptr = getCardByNameAndProviderId(cardName, cardNames[cardName]);
|
||||||
|
if (ptr)
|
||||||
|
cardInfos.append(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return cardInfos;
|
||||||
|
}
|
||||||
|
|
||||||
CardInfoPtr CardDatabase::getCardByNameAndProviderId(const QString &cardName, const QString &providerId) const
|
CardInfoPtr CardDatabase::getCardByNameAndProviderId(const QString &cardName, const QString &providerId) const
|
||||||
{
|
{
|
||||||
auto info = getCard(cardName);
|
auto info = getCard(cardName);
|
||||||
|
|
|
||||||
|
|
@ -472,6 +472,7 @@ public:
|
||||||
void removeCard(CardInfoPtr card);
|
void removeCard(CardInfoPtr card);
|
||||||
[[nodiscard]] CardInfoPtr getCard(const QString &cardName) const;
|
[[nodiscard]] CardInfoPtr getCard(const QString &cardName) const;
|
||||||
[[nodiscard]] QList<CardInfoPtr> getCards(const QStringList &cardNames) const;
|
[[nodiscard]] QList<CardInfoPtr> getCards(const QStringList &cardNames) const;
|
||||||
|
QList<CardInfoPtr> getCardsByNameAndProviderId(const QMap<QString, QString> &cardNames) const;
|
||||||
[[nodiscard]] CardInfoPtr getCardByNameAndProviderId(const QString &cardName, const QString &providerId) const;
|
[[nodiscard]] CardInfoPtr getCardByNameAndProviderId(const QString &cardName, const QString &providerId) const;
|
||||||
[[nodiscard]] CardInfoPerSet getPreferredSetForCard(const QString &cardName) const;
|
[[nodiscard]] CardInfoPerSet getPreferredSetForCard(const QString &cardName) const;
|
||||||
[[nodiscard]] CardInfoPerSet getSpecificSetForCard(const QString &cardName, const QString &providerId) const;
|
[[nodiscard]] CardInfoPerSet getSpecificSetForCard(const QString &cardName, const QString &providerId) const;
|
||||||
|
|
|
||||||
|
|
@ -290,8 +290,8 @@ void DeckViewContainer::deckSelectFinished(const Response &r)
|
||||||
{
|
{
|
||||||
const Response_DeckDownload &resp = r.GetExtension(Response_DeckDownload::ext);
|
const Response_DeckDownload &resp = r.GetExtension(Response_DeckDownload::ext);
|
||||||
DeckLoader newDeck(QString::fromStdString(resp.deck()));
|
DeckLoader newDeck(QString::fromStdString(resp.deck()));
|
||||||
// TODO CHANGE THIS TO BE SELECTED BY UUID
|
PictureLoader::cacheCardPixmaps(
|
||||||
PictureLoader::cacheCardPixmaps(CardDatabaseManager::getInstance()->getCards(newDeck.getCardList()));
|
CardDatabaseManager::getInstance()->getCardsByNameAndProviderId(newDeck.getCardListWithProviderId()));
|
||||||
setDeck(newDeck);
|
setDeck(newDeck);
|
||||||
switchToDeckLoadedView();
|
switchToDeckLoadedView();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -825,6 +825,19 @@ void DeckList::getCardListHelper(InnerDecklistNode *item, QSet<QString> &result)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeckList::getCardListWithProviderIdHelper(InnerDecklistNode *item, QMap<QString, QString> &result) const
|
||||||
|
{
|
||||||
|
for (int i = 0; i < item->size(); ++i) {
|
||||||
|
auto *node = dynamic_cast<DecklistCardNode *>(item->at(i));
|
||||||
|
|
||||||
|
if (node) {
|
||||||
|
result.insert(node->getName(), node->getCardProviderId());
|
||||||
|
} else {
|
||||||
|
getCardListWithProviderIdHelper(dynamic_cast<InnerDecklistNode *>(item->at(i)), result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QStringList DeckList::getCardList() const
|
QStringList DeckList::getCardList() const
|
||||||
{
|
{
|
||||||
QSet<QString> result;
|
QSet<QString> result;
|
||||||
|
|
@ -832,6 +845,13 @@ QStringList DeckList::getCardList() const
|
||||||
return result.values();
|
return result.values();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QMap<QString, QString> DeckList::getCardListWithProviderId() const
|
||||||
|
{
|
||||||
|
QMap<QString, QString> result;
|
||||||
|
getCardListWithProviderIdHelper(root, result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
int DeckList::getSideboardSize() const
|
int DeckList::getSideboardSize() const
|
||||||
{
|
{
|
||||||
int size = 0;
|
int size = 0;
|
||||||
|
|
|
||||||
|
|
@ -258,6 +258,7 @@ private:
|
||||||
QMap<QString, SideboardPlan *> sideboardPlans;
|
QMap<QString, SideboardPlan *> sideboardPlans;
|
||||||
InnerDecklistNode *root;
|
InnerDecklistNode *root;
|
||||||
void getCardListHelper(InnerDecklistNode *node, QSet<QString> &result) const;
|
void getCardListHelper(InnerDecklistNode *node, QSet<QString> &result) const;
|
||||||
|
void getCardListWithProviderIdHelper(InnerDecklistNode *item, QMap<QString, QString> &result) const;
|
||||||
InnerDecklistNode *getZoneObjFromName(const QString &zoneName);
|
InnerDecklistNode *getZoneObjFromName(const QString &zoneName);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
@ -358,6 +359,7 @@ public:
|
||||||
return root->isEmpty() && name.isEmpty() && comments.isEmpty() && sideboardPlans.isEmpty();
|
return root->isEmpty() && name.isEmpty() && comments.isEmpty() && sideboardPlans.isEmpty();
|
||||||
}
|
}
|
||||||
QStringList getCardList() const;
|
QStringList getCardList() const;
|
||||||
|
QMap<QString, QString> getCardListWithProviderId() const;
|
||||||
|
|
||||||
int getSideboardSize() const;
|
int getSideboardSize() const;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue