mirror of
https://github.com/magefree/mage.git
synced 2025-12-25 13:02:06 -08:00
Some updates.
This commit is contained in:
parent
96034c4c2b
commit
a280605591
4 changed files with 112 additions and 66 deletions
|
|
@ -36,6 +36,7 @@ import java.util.ArrayList;
|
|||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.mage.plugins.card.images.CardDownloadData;
|
||||
|
||||
|
|
@ -48,7 +49,8 @@ public enum TokensMtgImageSource implements CardImageSource {
|
|||
instance;
|
||||
private static final Logger logger = Logger.getLogger(TokensMtgImageSource.class);
|
||||
|
||||
private List<TokenData> tokensData;
|
||||
// [[EXP/Name, TokenData>
|
||||
private HashMap<String, ArrayList<TokenData>> tokensData;
|
||||
|
||||
private final Object tokensDataSync = new Object();
|
||||
|
||||
|
|
@ -98,7 +100,12 @@ public enum TokensMtgImageSource implements CardImageSource {
|
|||
"Sorin",
|
||||
"Tamiyo",
|
||||
"Teferi",
|
||||
"Venser",};
|
||||
"Venser",
|
||||
// Custom Emblems
|
||||
"Yoda",
|
||||
"Obi-Wan Kenobi",
|
||||
"Aurra Sing"
|
||||
};
|
||||
|
||||
private static final Map<String, String> SET_NAMES_REPLACEMENT = new HashMap<String, String>() {
|
||||
{
|
||||
|
|
@ -132,38 +139,31 @@ public enum TokensMtgImageSource implements CardImageSource {
|
|||
// e.g. http://tokens.mtg.onl/tokens/ORI_010-Thopter.jpg -- token number 010
|
||||
// We don't know these numbers, but we can take them from a file
|
||||
// with tokens information that can be downloaded from the site.
|
||||
List<TokenData> newTokensData = getTokensData();
|
||||
|
||||
if (newTokensData.isEmpty()) {
|
||||
if (tokensData.isEmpty()) {
|
||||
logger.info("Source " + getSourceName() + " provides no token data.");
|
||||
return null;
|
||||
}
|
||||
|
||||
List<TokenData> matchedTokens = new ArrayList<>();
|
||||
for (TokenData token : newTokensData) {
|
||||
if (name.equalsIgnoreCase(token.getName()) && set.equalsIgnoreCase(token.getExpansionSetCode())) {
|
||||
matchedTokens.add(token);
|
||||
}
|
||||
}
|
||||
|
||||
if (matchedTokens.isEmpty()) {
|
||||
String key = set + "/" + name;
|
||||
List<TokenData> list = tokensData.get(key);
|
||||
if (list == null) {
|
||||
logger.info("Could not find data for token " + name + ", set " + set + ".");
|
||||
return null;
|
||||
}
|
||||
|
||||
TokenData tokenData;
|
||||
if (type == 0) {
|
||||
if (matchedTokens.size() > 1) {
|
||||
if (list.size() > 1) {
|
||||
logger.info("Multiple images were found for token " + name + ", set " + set + '.');
|
||||
}
|
||||
logger.info("Token found: " + name + ", set " + set + '.');
|
||||
tokenData = matchedTokens.get(0);
|
||||
tokenData = list.get(0);
|
||||
} else {
|
||||
if (type > matchedTokens.size()) {
|
||||
if (type > list.size()) {
|
||||
logger.warn("Not enough images for token with type " + type + ", name " + name + ", set " + set + '.');
|
||||
return null;
|
||||
}
|
||||
tokenData = matchedTokens.get(card.getType() - 1);
|
||||
tokenData = list.get(card.getType() - 1);
|
||||
}
|
||||
|
||||
String url = "http://tokens.mtg.onl/tokens/" + tokenData.getExpansionSetCode().trim() + '_'
|
||||
|
|
@ -172,15 +172,24 @@ public enum TokensMtgImageSource implements CardImageSource {
|
|||
return url;
|
||||
}
|
||||
|
||||
private List<TokenData> getTokensData() throws IOException {
|
||||
private HashMap<String, ArrayList<TokenData>> getTokensData() throws IOException {
|
||||
synchronized (tokensDataSync) {
|
||||
if (tokensData == null) {
|
||||
tokensData = new ArrayList<>();
|
||||
tokensData = new HashMap<>();
|
||||
|
||||
// get tokens data from resource file
|
||||
try (InputStream inputStream = this.getClass().getResourceAsStream("/tokens-mtg-onl-list.csv")) {
|
||||
List<TokenData> fileTokensData = parseTokensData(inputStream);
|
||||
tokensData.addAll(fileTokensData);
|
||||
for (TokenData tokenData : fileTokensData) {
|
||||
String key = tokenData.getExpansionSetCode() + "/" + tokenData.getName();
|
||||
ArrayList<TokenData> list = tokensData.get(key);
|
||||
if (list == null) {
|
||||
list = new ArrayList<>();
|
||||
tokensData.put(key, list);
|
||||
logger.info("Added key: " + key);
|
||||
}
|
||||
list.add(tokenData);
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
logger.warn("Failed to get tokens description from resource file tokens-mtg-onl-list.csv", exception);
|
||||
}
|
||||
|
|
@ -190,23 +199,26 @@ public enum TokensMtgImageSource implements CardImageSource {
|
|||
URL url = new URL("http://tokens.mtg.onl/data/SetsWithTokens.csv");
|
||||
try (InputStream inputStream = url.openStream()) {
|
||||
List<TokenData> siteTokensData = parseTokensData(inputStream);
|
||||
List<TokenData> newTokensData = new ArrayList<>();
|
||||
for (TokenData siteData : siteTokensData) {
|
||||
boolean isNew = true;
|
||||
for (TokenData fileData : tokensData) {
|
||||
if (siteData.getName().equalsIgnoreCase(fileData.getName())
|
||||
&& siteData.getNumber().equalsIgnoreCase(fileData.getNumber())
|
||||
&& siteData.getExpansionSetCode().equalsIgnoreCase(fileData.getExpansionSetCode())) {
|
||||
isNew = false;
|
||||
break;
|
||||
String key = siteData.getExpansionSetCode() + "/" + siteData.getName();
|
||||
ArrayList<TokenData> list = tokensData.get(key);
|
||||
if (list == null) {
|
||||
list = new ArrayList<>();
|
||||
tokensData.put(key, list);
|
||||
list.add(siteData);
|
||||
} else {
|
||||
boolean newToken = true;
|
||||
for (TokenData tokenData : list) {
|
||||
if (siteData.getNumber().equals(tokenData.number)) {
|
||||
newToken = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (newToken) {
|
||||
list.add(siteData);
|
||||
}
|
||||
}
|
||||
if (isNew) {
|
||||
newTokensData.add(siteData);
|
||||
}
|
||||
}
|
||||
|
||||
tokensData.addAll(newTokensData);
|
||||
} catch (Exception exception) {
|
||||
logger.warn("Failed to get tokens description from tokens.mtg.onl", exception);
|
||||
}
|
||||
|
|
@ -290,14 +302,12 @@ public enum TokensMtgImageSource implements CardImageSource {
|
|||
|
||||
@Override
|
||||
public int getTokenImages() {
|
||||
int number = 0;
|
||||
try {
|
||||
List<TokenData> newTokensData = getTokensData();
|
||||
number = newTokensData.size();
|
||||
getTokensData();
|
||||
} catch (IOException ex) {
|
||||
logger.error(getSourceName() + ": Loading available data failed. " + ex.getMessage());
|
||||
}
|
||||
return number;
|
||||
return tokensData.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -308,4 +318,21 @@ public enum TokensMtgImageSource implements CardImageSource {
|
|||
@Override
|
||||
public void doPause(String httpImageUrl) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isImageProvided(String setCode, String cardName) {
|
||||
try {
|
||||
getTokensData();
|
||||
} catch (IOException ex) {
|
||||
java.util.logging.Logger.getLogger(TokensMtgImageSource.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
String key = setCode + "/" + cardName;
|
||||
return (tokensData.containsKey(key));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSetSupportedComplete(String setCode) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,9 +46,9 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
|
||||
private static final Logger logger = Logger.getLogger(DownloadPictures.class);
|
||||
|
||||
public static final String ALL_CARDS = "- All cards from that source";
|
||||
public static final String ALL_STANDARD_CARDS = "- All cards from standard from that source";
|
||||
public static final String ALL_TOKENS = "- All token images from that source";
|
||||
public static final String ALL_IMAGES = "- All images from that source";
|
||||
public static final String ALL_STANDARD_IMAGES = "- All images from standard from that source";
|
||||
public static final String ALL_TOKENS = "- Only all token images from that source";
|
||||
|
||||
private final JProgressBar bar;
|
||||
private final JOptionPane dlg;
|
||||
|
|
@ -204,7 +204,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
bar.setStringPainted(true);
|
||||
|
||||
Dimension d = bar.getPreferredSize();
|
||||
d.width = 300;
|
||||
d.width = 400;
|
||||
bar.setPreferredSize(d);
|
||||
|
||||
// JOptionPane
|
||||
|
|
@ -232,8 +232,8 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
ArrayList<String> supportedSets = cardImageSource.getSupportedSets();
|
||||
List<String> setNames = new ArrayList<>();
|
||||
if (supportedSets != null) {
|
||||
setNames.add(ALL_CARDS);
|
||||
setNames.add(ALL_STANDARD_CARDS);
|
||||
setNames.add(ALL_IMAGES);
|
||||
setNames.add(ALL_STANDARD_IMAGES);
|
||||
}
|
||||
if (cardImageSource.isTokenSource()) {
|
||||
setNames.add(ALL_TOKENS);
|
||||
|
|
@ -258,16 +258,15 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
|
||||
private void updateCardsToDownload(String itemText) {
|
||||
selectedSetCodes.clear();
|
||||
boolean tokens = false;
|
||||
switch (itemText) {
|
||||
case ALL_CARDS:
|
||||
case ALL_IMAGES:
|
||||
if (cardImageSource.getSupportedSets() == null) {
|
||||
selectedSetCodes = cardImageSource.getSupportedSets();
|
||||
} else {
|
||||
selectedSetCodes.addAll(cardImageSource.getSupportedSets());
|
||||
}
|
||||
break;
|
||||
case ALL_STANDARD_CARDS:
|
||||
case ALL_STANDARD_IMAGES:
|
||||
List<String> standardSets = ConstructedFormats.getSetsByFormat(ConstructedFormats.STANDARD);
|
||||
for (String setCode : cardImageSource.getSupportedSets()) {
|
||||
if (standardSets.contains(setCode)) {
|
||||
|
|
@ -277,9 +276,6 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
}
|
||||
}
|
||||
break;
|
||||
case ALL_TOKENS:
|
||||
tokens = true;
|
||||
break;
|
||||
default:
|
||||
int nonSetEntries = 0;
|
||||
if (cardImageSource.getSupportedSets() != null) {
|
||||
|
|
@ -291,19 +287,24 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
selectedSetCodes.add(cardImageSource.getSupportedSets().get(jComboBoxSet.getSelectedIndex() - nonSetEntries));
|
||||
}
|
||||
cardsToDownload.clear();
|
||||
int numberTokenImagesAvailable = 0;
|
||||
int numberCardImagesAvailable = 0;
|
||||
for (CardDownloadData data : allCardsMissingImage) {
|
||||
if ((data.isToken() && tokens)
|
||||
|| (!data.isToken() && selectedSetCodes != null && selectedSetCodes.contains(data.getSet()))) {
|
||||
if (cardImageSource.isSetSupportedComplete(data.getSet()) || cardImageSource.isImageProvided(data.getSet(), data.getName())) {
|
||||
if (data.isToken() && cardImageSource.isTokenSource()) {
|
||||
if (cardImageSource.isImageProvided(data.getSet(), data.getName())) {
|
||||
numberTokenImagesAvailable++;
|
||||
cardsToDownload.add(data);
|
||||
}
|
||||
} else {
|
||||
if (selectedSetCodes != null && selectedSetCodes.contains(data.getSet())) {
|
||||
if (cardImageSource.isSetSupportedComplete(data.getSet()) || cardImageSource.isImageProvided(data.getSet(), data.getName())) {
|
||||
numberCardImagesAvailable++;
|
||||
cardsToDownload.add(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
int numberTokenImagesAvailable = 0;
|
||||
if (tokens) {
|
||||
cardImageSource.getTokenImages();
|
||||
}
|
||||
updateProgressText(cardsToDownload.size() + numberTokenImagesAvailable);
|
||||
updateProgressText(numberCardImagesAvailable, numberTokenImagesAvailable);
|
||||
}
|
||||
|
||||
private void comboBoxSetItemSelected(ItemEvent event) {
|
||||
|
|
@ -311,7 +312,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
updateCardsToDownload(event.getItem().toString());
|
||||
}
|
||||
|
||||
private void updateProgressText(int cardCount) {
|
||||
private void updateProgressText(int cardCount, int tokenCount) {
|
||||
missingTokens = 0;
|
||||
for (CardDownloadData card : allCardsMissingImage) {
|
||||
if (card.isToken()) {
|
||||
|
|
@ -320,10 +321,10 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
}
|
||||
missingCards = allCardsMissingImage.size() - missingTokens;
|
||||
jLabelAllMissing.setText("Missing: " + missingCards + " card images / " + missingTokens + " token images");
|
||||
|
||||
float mb = (cardCount * cardImageSource.getAverageSize()) / 1024;
|
||||
bar.setString(String.format(cardIndex == cardCount ? "%d of %d image downloads finished! Please close!"
|
||||
: "%d of %d image downloads finished! Please wait! [%.1f Mb]", 0, cardCount, mb));
|
||||
int imageSum = cardCount + tokenCount;
|
||||
float mb = (imageSum * cardImageSource.getAverageSize()) / 1024;
|
||||
bar.setString(String.format(cardIndex == imageSum ? "%d of %d (%d cards/%d tokens) image downloads finished! Please close!"
|
||||
: "%d of %d (%d cards/%d tokens) image downloads finished! Please wait! [%.1f Mb]", 0, imageSum, cardCount, tokenCount, mb));
|
||||
}
|
||||
|
||||
private static String createDownloadName(CardInfo card) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue