foul-magics/Mage/src/main/java/mage/cards/repository/CardScanner.java
Oleg Agafonov 76e57d009e Multiple changes:
- game: fixed possible empty pay text in custom costs;
- debug: improved debug info for CardInfo objects;
- db: removed unused split sides from cards database;
- db: fixed constant cards adding on each cards database scan (e.g. on tests start);
2021-08-13 14:54:10 +04:00

97 lines
4 KiB
Java

package mage.cards.repository;
import mage.cards.*;
import org.apache.log4j.Logger;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* @author North
*/
public final class CardScanner {
public static boolean scanned = false;
private static final Logger logger = Logger.getLogger(CardScanner.class);
public static void scan() {
scan(null);
}
public static void scan(List<String> errorsList) {
if (scanned) {
return;
}
scanned = true;
List<CardInfo> cardsToAdd = new ArrayList<>();
List<ExpansionInfo> setsToAdd = new ArrayList<>();
List<ExpansionInfo> setsToUpdate = new ArrayList<>();
// check sets
for (ExpansionSet set : Sets.getInstance().values()) {
ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(set.getCode());
if (expansionInfo == null) {
// need add
setsToAdd.add(new ExpansionInfo(set));
} else if (!expansionInfo.name.equals(set.getName())
|| !expansionInfo.code.equals(set.getCode())
|| (expansionInfo.blockName == null ? set.getBlockName() != null : !expansionInfo.blockName.equals(set.getBlockName()))
|| !expansionInfo.releaseDate.equals(set.getReleaseDate())
|| expansionInfo.type != set.getSetType()
|| expansionInfo.boosters != set.hasBoosters()
|| expansionInfo.basicLands != set.hasBasicLands()) {
// need update
setsToUpdate.add(expansionInfo);
}
}
ExpansionRepository.instance.saveSets(setsToAdd, setsToUpdate, ExpansionRepository.instance.getContentVersionConstant());
// check cards (only add mode, without updates)
for (ExpansionSet set : Sets.getInstance().values()) {
for (ExpansionSet.SetCardInfo setInfo : set.getSetCardInfo()) {
if (CardRepository.instance.findCard(set.getCode(), setInfo.getCardNumber(), false) == null) {
// found new card
Card card = CardImpl.createCard(
setInfo.getCardClass(),
new CardSetInfo(setInfo.getName(), set.getCode(), setInfo.getCardNumber(), setInfo.getRarity(), setInfo.getGraphicInfo()),
errorsList);
if (card != null) {
// Adds only main card, except night cards.
// TODO: remove night cards from sets and db someday
// Possible reasons for night cards in sets:
// - direct put night card to battlefield by name in tests;
// - images download;
// - in old days xmage client was able to works without card classes, e.g.
// downloads unknown cards from the server as texts (images, hints and all other works fine with it)
cardsToAdd.add(new CardInfo(card));
}
}
}
}
CardRepository.instance.saveCards(cardsToAdd, CardRepository.instance.getContentVersionConstant());
}
public static List<Card> getAllCards() {
return getAllCards(true);
}
public static List<Card> getAllCards(boolean ignoreCustomSets) {
Collection<ExpansionSet> sets = Sets.getInstance().values();
List<Card> cards = new ArrayList<>();
for (ExpansionSet set : sets) {
if (ignoreCustomSets && set.getSetType().isCustomSet()) {
continue;
}
for (ExpansionSet.SetCardInfo setInfo : set.getSetCardInfo()) {
cards.add(CardImpl.createCard(setInfo.getCardClass(), new CardSetInfo(setInfo.getName(), set.getCode(),
setInfo.getCardNumber(), setInfo.getRarity(), setInfo.getGraphicInfo())));
}
}
return cards;
}
}