From 08df195bc30585ba6a282d1e63d227182d71fd17 Mon Sep 17 00:00:00 2001 From: spjspj Date: Wed, 14 Sep 2016 00:38:24 +1000 Subject: [PATCH] spjspj - Fix for mtg.onl --- .../card/dl/sources/CardImageSource.java | 1 + .../dl/sources/MagicCardsImageSource.java | 9 +++-- .../card/dl/sources/MtgImageSource.java | 5 +++ .../dl/sources/MtgOnlTokensImageSource.java | 36 ++++++++++++++----- .../dl/sources/MythicspoilerComSource.java | 5 +++ .../card/dl/sources/TokensMtgImageSource.java | 36 ++++++++++--------- .../dl/sources/WizardCardsImageSource.java | 10 ++++-- .../plugins/card/images/DownloadPictures.java | 24 ++++++------- .../plugins/card/utils/CardImageUtils.java | 26 +++++++------- 9 files changed, 94 insertions(+), 58 deletions(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java index 5ac34ceb127..14fe6c1db99 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java @@ -14,4 +14,5 @@ public interface CardImageSource { String getFileForHttpImage(String httpImageUrl); String getSourceName(); Float getAverageSize(); + Integer getTotalImages(); } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java index c91eeab654f..556f1952c4c 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java @@ -152,12 +152,12 @@ public class MagicCardsImageSource implements CardImageSource { } return instance; } - + @Override public String getNextHttpImageUrl() { return null; } - + @Override public String getFileForHttpImage(String httpImageUrl) { return null; @@ -216,4 +216,9 @@ public class MagicCardsImageSource implements CardImageSource { public Float getAverageSize() { return 70.0f; } + + @Override + public Integer getTotalImages() { + return -1; + } } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgImageSource.java index b7f77ac791b..c6db0f16901 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgImageSource.java @@ -105,4 +105,9 @@ public class MtgImageSource implements CardImageSource { public Float getAverageSize() { return 70.0f; } + + @Override + public Integer getTotalImages() { + return -1; + } } \ No newline at end of file diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgOnlTokensImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgOnlTokensImageSource.java index f91179d0b4b..14719fd272c 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgOnlTokensImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MtgOnlTokensImageSource.java @@ -41,8 +41,8 @@ import org.mage.plugins.card.images.DownloadPictures; public class MtgOnlTokensImageSource implements CardImageSource { private static final Logger logger = Logger.getLogger(MtgOnlTokensImageSource.class); - private static CardImageSource instance = new MtgOnlTokensImageSource(); + private static int maxTimes = 0; public static CardImageSource getInstance() { if (instance == null) { @@ -66,10 +66,19 @@ public class MtgOnlTokensImageSource implements CardImageSource { if (copyUrlToImage == null) { setupLinks(); } - + for (String key : copyUrlToImageDone.keySet()) { - if (copyUrlToImageDone.get(key) == false) { - copyUrlToImageDone.put(key, true); + if (copyUrlToImageDone.get(key) < maxTimes) { + copyUrlToImageDone.put(key, maxTimes); + return key; + } + } + if (maxTimes < 2) { + maxTimes++; + } + for (String key : copyUrlToImageDone.keySet()) { + if (copyUrlToImageDone.get(key) < maxTimes) { + copyUrlToImageDone.put(key, maxTimes); return key; } } @@ -91,7 +100,7 @@ public class MtgOnlTokensImageSource implements CardImageSource { HashMap copyUrlToImage = null; HashMap copyImageToUrl = null; - HashMap copyUrlToImageDone = null; + HashMap copyUrlToImageDone = null; private void setupLinks() { if (copyUrlToImage != null) { @@ -99,7 +108,7 @@ public class MtgOnlTokensImageSource implements CardImageSource { } copyUrlToImage = new HashMap(); copyImageToUrl = new HashMap(); - copyUrlToImageDone = new HashMap(); + copyUrlToImageDone = new HashMap(); copyUrlToImage.put("Angel_B_3_3.jpg", "ANGEL.B.ANGEL.CREATURE.3.3.full.jpg"); copyUrlToImage.put("Angel_W_3_3.jpg", "ANGEL.W.ANGEL.CREATURE.3.3.full.jpg"); copyUrlToImage.put("Angel_W_4_4.jpg", "ANGEL.W.ANGEL.CREATURE.4.4.full.jpg"); @@ -338,21 +347,30 @@ public class MtgOnlTokensImageSource implements CardImageSource { copyUrlToImage.put("Zombie_B_X_X.jpg", "ZOMBIE.B.ZOMBIE.CREATURE.X.X.full.jpg"); copyUrlToImage.put("Zombie_Horror_B_X_X.jpg", "ZOMBIEHORROR.B.ZOMBIEHORROR.CREATURE.X.X.full.jpg"); copyUrlToImage.put("Zombie_U_X_X.jpg", "ZOMBIE.U.ZOMBIE.CREATURE.X.X.full.jpg"); - copyUrlToImage.put("Zombie_Wizard_UB_1_1.jpg", "ZOMBIEWIZARD.BG.ZOMBIEWIZARD.CREATURE.1.1.full.jpg"); copyUrlToImage.put("Zombie_Wizard_UB_1_1.jpg", "ZOMBIEWIZARD.UB.ZOMBIEWIZARD.CREATURE.1.1.full.jpg"); for (String key : copyUrlToImage.keySet()) { - copyUrlToImageDone.put(key, false); + copyUrlToImageDone.put(key, maxTimes); copyImageToUrl.put(copyUrlToImage.get(key), key); } } @Override public String generateTokenUrl(CardDownloadData card) throws IOException { - if (copyUrlToImage == null) { setupLinks(); } return null; } + + @Override + public Integer getTotalImages() { + if (copyUrlToImage == null) { + setupLinks(); + } + if (copyUrlToImage != null) { + return copyImageToUrl.size(); + } + return -1; + } } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MythicspoilerComSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MythicspoilerComSource.java index 11b1657c08d..018e47b08a0 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MythicspoilerComSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MythicspoilerComSource.java @@ -244,4 +244,9 @@ public class MythicspoilerComSource implements CardImageSource { public String getFileForHttpImage(String httpImageUrl) { return null; } + + @Override + public Integer getTotalImages() { + return -1; + } } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/TokensMtgImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/TokensMtgImageSource.java index 089085660bc..0ec9c90d7b8 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/TokensMtgImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/TokensMtgImageSource.java @@ -25,7 +25,6 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package org.mage.plugins.card.dl.sources; import java.io.BufferedReader; @@ -66,12 +65,12 @@ public class TokensMtgImageSource implements CardImageSource { public Float getAverageSize() { return 26.7f; } - + @Override public String getNextHttpImageUrl() { return null; } - + @Override public String getFileForHttpImage(String httpImageUrl) { return null; @@ -168,7 +167,7 @@ public class TokensMtgImageSource implements CardImageSource { tokenData = matchedTokens.get(card.getType() - 1); } - String url = "http://tokens.mtg.onl/tokens/" + tokenData.getExpansionSetCode().trim() + "_" + String url = "http://tokens.mtg.onl/tokens/" + tokenData.getExpansionSetCode().trim() + "_" + tokenData.getNumber().trim() + "-" + tokenData.getName().trim()+ ".jpg"; url = url.replace(' ', '-'); return url; @@ -269,19 +268,19 @@ public class TokensMtgImageSource implements CardImageSource { } } else { if (state == 0) { - set = line.substring(0, 3); - state = 1; - } else { - if (state == 1) { - state = 2; - } - String[] split = line.split(","); - // replace special comma for cards like 'Ashaya‚ the Awoken World' - String name = split[0].replace('‚', ','); - String number = split[1]; - TokenData token = new TokenData(name, number, set); - tokensData.add(token); + set = line.substring(0, 3); + state = 1; + } else { + if (state == 1) { + state = 2; } + String[] split = line.split(","); + // replace special comma for cards like 'Ashaya‚ the Awoken World' + String name = split[0].replace('‚', ','); + String number = split[1]; + TokenData token = new TokenData(name, number, set); + tokensData.add(token); + } } line = reader.readLine(); @@ -307,6 +306,7 @@ public class TokensMtgImageSource implements CardImageSource { } final class TokenData { + final private String name; final private String number; final private String expansionSetCode; @@ -330,4 +330,8 @@ public class TokensMtgImageSource implements CardImageSource { } } + @Override + public Integer getTotalImages() { + return -1; + } } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java index 2d058977c9b..83fc6d72805 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java @@ -271,12 +271,12 @@ public class WizardCardsImageSource implements CardImageSource { public String getNextHttpImageUrl() { return null; } - + @Override public String getFileForHttpImage(String httpImageUrl) { return null; } - + private Map getSetLinks(String cardSet) { ConcurrentHashMap setLinks = new ConcurrentHashMap<>(); ExecutorService executor = Executors.newFixedThreadPool(10); @@ -511,5 +511,9 @@ public class WizardCardsImageSource implements CardImageSource { } } - + + @Override + public Integer getTotalImages() { + return -1; + } } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java index 3b6dccae029..ef9910cda9d 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java @@ -285,7 +285,6 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab try { offlineMode = true; - for (CardInfo card : allCards) { if (!card.getCardNumber().isEmpty() && !"0".equals(card.getCardNumber()) && !card.getSetCode().isEmpty() && !ignoreUrls.contains(card.getSetCode())) { @@ -328,10 +327,10 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab } } allCardsUrls.addAll(getTokenCardUrls()); - } catch (Exception e) { logger.error(e); } + int numberTokenImages = allCardsUrls.size() - numberCardImages; TFile file; @@ -504,17 +503,14 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab imageRef = cardImageSource.getSourceName() + imageRef; try { URL imageUrl = new URL(imageRef); - - Runnable task = new DownloadTask(imageUrl, fileName, 1); + Runnable task = new DownloadTask(imageUrl, fileName, cardImageSource.getTotalImages()); executor.execute(task); } catch (Exception ex) { } - } else { - if (card != null) { - logger.info("Card not available on " + cardImageSource.getSourceName() + ": " + card.getName() + " (" + card.getSet() + ")"); - synchronized (sync) { - update(cardIndex + 1, cardsToDownload.size()); - } + } else if (card != null && cardImageSource.getTotalImages() == -1) { + logger.info("Card not available on " + cardImageSource.getSourceName() + ": " + card.getName() + " (" + card.getSet() + ")"); + synchronized (sync) { + update(cardIndex + 1, cardsToDownload.size()); } } } else if (url != null) { @@ -587,9 +583,9 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab } String imagePath; if (useSpecifiedPaths) { - imagePath = CardImageUtils.getTokenBasePath(); // temporaryFile = plugins/images\NUM.jace, telepath unbound.jpg - imagePath += actualFilename; // imagePath = d:\xmage_images\ORI.zip\ORI\Jace,telepathunbound.jpg - String tmpFile = filePath + actualFilename + ".2"; + imagePath = CardImageUtils.getTokenBasePath(); + imagePath += actualFilename; + String tmpFile = filePath + "ADDTOTOK" + actualFilename; temporaryFile = new File(tmpFile.toString()); } else { imagePath = CardImageUtils.generateImagePath(card); @@ -663,7 +659,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab new TFile(temporaryFile).cp_rp(outputFile); } } else { - if (card != null) { + if (card != null && !useSpecifiedPaths) { logger.warn("Image download for " + card.getName() + (!card.getDownloadName().equals(card.getName()) ? " downloadname: " + card.getDownloadName() : "") + "(" + card.getSet() + ") failed - responseCode: " + responseCode + " url: " + url.toString()); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java b/Mage.Client/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java index d527c659dcd..da83690071a 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java @@ -120,24 +120,22 @@ public class CardImageUtils { public static String getTokenBasePath() { String useDefault = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_USE_DEFAULT, "true"); - String imagesPath = useDefault.equals("true") ? null : PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PATH, null); - - if (PreferencesDialog.isSaveImagesToZip()) { - return imagesPath + TFile.separator + "TOK" + ".zip" + TFile.separator; - } else { - return imagesPath + TFile.separator + "TOK" + TFile.separator; + String imagesPath = useDefault.equals("true") ? Constants.IO.imageBaseDir : PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PATH, null); + if (!imagesPath.endsWith(TFile.separator)) { + imagesPath += TFile.separator; } + + String finalPath = ""; + if (PreferencesDialog.isSaveImagesToZip()) { + finalPath = imagesPath + "TOK" + ".zip" + TFile.separator; + } else { + finalPath = imagesPath + "TOK" + TFile.separator; + } + return finalPath; } private static String getTokenDescriptorImagePath(CardDownloadData card) { - String useDefault = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_USE_DEFAULT, "true"); - String imagesPath = useDefault.equals("true") ? null : PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PATH, null); - - if (PreferencesDialog.isSaveImagesToZip()) { - return imagesPath + TFile.separator + "TOK" + ".zip" + TFile.separator + card.getTokenDescriptor() + ".full.jpg"; - } else { - return imagesPath + TFile.separator + "TOK" + TFile.separator + card.getTokenDescriptor() + ".full.jpg"; - } + return getTokenBasePath() + card.getTokenDescriptor() + ".full.jpg"; } private static String buildTokenPath(String imagesDir, String set) {