diff --git a/Mage.Client/plugins/mage-card-plugin.jar b/Mage.Client/plugins/mage-card-plugin.jar index 43b6762a0af..bdd06bf4b0b 100644 Binary files a/Mage.Client/plugins/mage-card-plugin.jar and b/Mage.Client/plugins/mage-card-plugin.jar differ diff --git a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/images/DownloadPictures.java b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/images/DownloadPictures.java index d4021df9207..00da5e4aa25 100644 --- a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/images/DownloadPictures.java +++ b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/images/DownloadPictures.java @@ -1,23 +1,24 @@ package org.mage.plugins.card.images; -import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.EventQueue; -import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; +import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.InputStreamReader; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URL; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Set; import javax.swing.AbstractButton; @@ -46,10 +47,6 @@ import mage.cards.Card; import org.apache.log4j.Logger; import org.mage.plugins.card.CardUrl; import org.mage.plugins.card.constants.Constants; -import org.mage.plugins.card.dl.DownloadGui; -import org.mage.plugins.card.dl.DownloadJob; -import org.mage.plugins.card.dl.Downloader; -import org.mage.plugins.card.dl.sources.GathererSymbols; import org.mage.plugins.card.properties.SettingsManager; import org.mage.plugins.card.utils.CardImageUtils; @@ -68,7 +65,6 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab private JLabel jLabel1; private static boolean offlineMode = false; private JCheckBox checkBox; - private JButton downloadSymbols; public static final Proxy.Type[] types = Proxy.Type.values(); @@ -79,10 +75,11 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab public static void startDownload(JFrame frame, Set allCards) { ArrayList cards = getNeededCards(allCards); - /*if (cards == null || cards.size() == 0) { - JOptionPane.showMessageDialog(null, "All card pictures have been downloaded."); - return; - }*/ + /* + * if (cards == null || cards.size() == 0) { + * JOptionPane.showMessageDialog(null, + * "All card pictures have been downloaded."); return; } + */ DownloadPictures download = new DownloadPictures(cards); JDialog dlg = download.getDlg(frame); @@ -156,7 +153,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab jComboBox1.setAlignmentX(Component.LEFT_ALIGNMENT); p0.add(jComboBox1); p0.add(Box.createVerticalStrut(5)); - + // Start final JButton b = new JButton("Start download"); b.addActionListener(new ActionListener() { @@ -213,7 +210,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab /** * read all card names and urls */ - ArrayList allcards = new ArrayList(); + ArrayList allCardsUrls = new ArrayList(); try { offlineMode = true; @@ -221,7 +218,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab for (Card card : allCards) { if (card.getCardNumber() > 0 && !card.getExpansionSetCode().isEmpty()) { CardUrl url = new CardUrl(card.getName(), card.getExpansionSetCode(), card.getCardNumber(), false); - allcards.add(url); + allCardsUrls.add(url); } else { if (card.getCardNumber() < 1) { System.err.println("There was a critical error!"); @@ -232,6 +229,8 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab } } } + + allCardsUrls.addAll(getTokenCardUrls()); } catch (Exception e) { log.error(e); } @@ -241,7 +240,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab /** * check to see which cards we already have */ - for (CardUrl card : allcards) { + for (CardUrl card : allCardsUrls) { boolean withCollectorId = false; if (card.name.equals("Forest") || card.name.equals("Mountain") || card.name.equals("Swamp") || card.name.equals("Island") || card.name.equals("Plains")) { @@ -269,6 +268,116 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab return cardsToDownload; } + private static ArrayList getTokenCardUrls() throws RuntimeException { + ArrayList list = new ArrayList(); + HashSet filter = new HashSet(); + InputStream in = DownloadPictures.class.getClassLoader().getResourceAsStream("card-pictures-tok.txt"); + readImageURLsFromFile(in, list, filter); + return list; + } + + private static void readImageURLsFromFile(InputStream in, ArrayList list, Set filter) throws RuntimeException { + if (in == null) { + log.error("resources input stream is null"); + return; + } + + BufferedReader reader = null; + InputStreamReader input = null; + try { + input = new InputStreamReader(in); + reader = new BufferedReader(input); + String line; + + line = reader.readLine(); + while (line != null) { + line = line.trim(); + if (line.startsWith("|")) { // new format + String[] params = line.split("\\|"); + if (params.length >= 4) { + if (params[1].toLowerCase().equals("generate") && params[2].startsWith("TOK:")) { + String set = params[2].substring(4); + CardUrl cardUrl = new CardUrl(params[3], set, 0, true); + cardUrl.token = true; + cardUrl.url = generateTokenUrl(params[3], set); + list.add(cardUrl); + } else { + CardUrl cardUrl = new CardUrl(params[2], params[1].toUpperCase(), 0, false); + cardUrl.url = params[3]; + if (cardUrl.set.startsWith("TOK:")) { + cardUrl.token = true; + cardUrl.set = cardUrl.set.substring(4); + } + list.add(cardUrl); + } + } else { + log.error("wrong format for image urls: " + line); + } + } + line = reader.readLine(); + } + + } catch (Exception ex) { + log.error(ex); + throw new RuntimeException("DownloadPictures : readFile() error"); + } finally { + if (input != null) { + try { + input.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + if (reader != null) { + try { + reader.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + } + } + + final static Map setNameReplacement = new HashMap() { + { + put("SOM", "scars-of-mirrodin"); + put("M11", "magic-2011"); + put("ROE", "rise-of-the-eldrazi"); + put("PVC", "duel-decks-phyrexia-vs-the-coalition"); + put("WWK", "worldwake"); + put("ZEN", "zendikar"); + put("HOP", "planechase"); + put("M10", "magic-2010"); + put("GVL", "duel-decks-garruk-vs-liliana"); + put("ARB", "alara-reborn"); + put("DVD", "duel-decks-divine-vs-demonic"); + put("CON", "conflux"); + put("JVC", "duel-decks-jace-vs-chandra"); + put("ALA", "shards-of-alara"); + put("EVE", "eventide"); + put("SHM", "shadowmoor"); + put("EVG", "duel-decks-elves-vs-goblins"); + put("MOR", "morningtide"); + put("LRW", "lorwyn"); + put("10E", "tenth-edition"); + put("CSP", "coldsnap"); + } + private static final long serialVersionUID = 1L; + }; + + private static String generateTokenUrl(String name, String set) { + String _name = name.replaceAll(" ", "-").toLowerCase(); + String _set = "not-supported-set"; + if (setNameReplacement.containsKey(set)) { + _set = setNameReplacement.get(set); + } else { + _set += "-" + set; + } + String url = "http://magiccards.info/extras/token/" + _set + "/" + _name + ".jpg"; + return url; + } + private class ProxyHandler implements ChangeListener { private int type; diff --git a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java index 55aea6d3997..247c24573a7 100644 --- a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java +++ b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java @@ -28,6 +28,7 @@ public class CardImageUtils { String cardname = c.name; String set = c.set; + if (cardname != null) { cardname = cardname.replace("'", ""); } CardUrl card = new CardUrl(cardname, set, c.collectorId, c.isToken); File file = null; @@ -99,8 +100,9 @@ public class CardImageUtils { String path = ""; CardUrl c = new CardUrl(card.name, card.set, 0, card.token); boolean found = false; // search only in older sets + for (String set : SettingsManager.getIntance().getTokenLookupOrder()) { - if (found) { // start looking for image only if we have found card.set in the list (as this list is ordered) + if (found || card.set.isEmpty()) { // start looking for image only if we have found card.set in the list (as this list is ordered) c.set = set; path = getTokenImagePath(c); file = new File(path); @@ -109,7 +111,7 @@ public class CardImageUtils { return path; } } - if (set.equals(card.set)) found = true; + //if (set.equals(card.set)) found = true; } return ""; } diff --git a/Mage.Plugins/Mage.Card.Plugin/src/main/resources/card-pictures-tok.txt b/Mage.Plugins/Mage.Card.Plugin/src/main/resources/card-pictures-tok.txt new file mode 100644 index 00000000000..5a1c70d3085 --- /dev/null +++ b/Mage.Plugins/Mage.Card.Plugin/src/main/resources/card-pictures-tok.txt @@ -0,0 +1,126 @@ +|Generate|TOK:SOM|Cat| +|Generate|TOK:SOM|Soldier| +|Generate|TOK:SOM|Goblin| +|Generate|TOK:SOM|Insect| +|Generate|TOK:SOM|Wolf| +|Generate|TOK:SOM|Golem| +|Generate|TOK:SOM|Myr| +|Generate|TOK:SOM|Wurm 1| +|Generate|TOK:SOM|Wurm 2| + +|Generate|TOK:M11|Avatar| +|Generate|TOK:M11|Bird| +|Generate|TOK:M11|Zombie| +|Generate|TOK:M11|Beast| +|Generate|TOK:M11|Ooze 1| +|Generate|TOK:M11|Ooze 2| + +|Generate|TOK:ROE|Eldrazi Spawn 1| +|Generate|TOK:ROE|Eldrazi Spawn 2| +|Generate|TOK:ROE|Eldrazi Spawn 3| +|Generate|TOK:ROE|Elemental| +|Generate|TOK:ROE|Ooze| +|Generate|TOK:ROE|Tuktuk the Returned| + +|Generate|TOK:PVC|Saproling| +|Generate|TOK:PVC|Hornet| +|Generate|TOK:PVC|Minion| + +|Generate|TOK:WWK|Soldier Ally| +|Generate|TOK:WWK|Dragon| +|Generate|TOK:WWK|Ogre| +|Generate|TOK:WWK|Elephant| +|Generate|TOK:WWK|Plant| +|Generate|TOK:WWK|Construct| + +|Generate|TOK:ZEN|Angel| +|Generate|TOK:ZEN|Bird| +|Generate|TOK:ZEN|Kor Soldier| +|Generate|TOK:ZEN|Illusion| +|Generate|TOK:ZEN|Merfolk| +|Generate|TOK:ZEN|Vampire| +|Generate|TOK:ZEN|Zombie Giant| +|Generate|TOK:ZEN|Elemental| +|Generate|TOK:ZEN|Beast| +|Generate|TOK:ZEN|Snake| +|Generate|TOK:ZEN|Wolf| + +|Generate|TOK:M10|Avatar| +|Generate|TOK:M10|Beast| +|Generate|TOK:M10|Gargoyle| +|Generate|TOK:M10|Goblin| +|Generate|TOK:M10|Insect| +|Generate|TOK:M10|Soldier| +|Generate|TOK:M10|Wolf| +|Generate|TOK:M10|Zombie| + +|Generate|TOK:ARB|Bird Soldier| +|Generate|TOK:ARB|Lizard| +|Generate|TOK:ARB|Dragon| +|Generate|TOK:ARB|Zombie Wizard| + +|Generate|TOK:CON|Angel| +|Generate|TOK:CON|Elemental| + +|Generate|TOK:JVC|Elemental Shaman| + +|Generate|TOK:ALA|Soldier| +|Generate|TOK:ALA|Beast| +|Generate|TOK:ALA|Homunculus| +|Generate|TOK:ALA|Thopter| +|Generate|TOK:ALA|Skeleton| +|Generate|TOK:ALA|Zombie| +|Generate|TOK:ALA|Dragon| +|Generate|TOK:ALA|Goblin| +|Generate|TOK:ALA|Ooze| +|Generate|TOK:ALA|Saproling| + +|Generate|TOK:EVE|Goat| +|Generate|TOK:EVE|Bird| +|Generate|TOK:EVE|Beast| +|Generate|TOK:EVE|Spirit| +|Generate|TOK:EVE|Elemental| +|Generate|TOK:EVE|Worm| +|Generate|TOK:EVE|Goblin Soldier| + +|Generate|TOK:SHM|Kithkin Soldier| +|Generate|TOK:SHM|Spirit| +|Generate|TOK:SHM|Rat| +|Generate|TOK:SHM|Elemental 1| +|Generate|TOK:SHM|Elf Warrior| +|Generate|TOK:SHM|Spider| +|Generate|TOK:SHM|Wolf| +|Generate|TOK:SHM|Faerie Rogue| +|Generate|TOK:SHM|Elemental 2| +|Generate|TOK:SHM|Giant Warrior| +|Generate|TOK:SHM|Goblin Warrior| +|Generate|TOK:SHM|Elf Warrior| + +|Generate|TOK:EVG|Elemental| +|Generate|TOK:EVG|Elf Warrior| +|Generate|TOK:EVG|Goblin| + +|Generate|TOK:MOR|Giant Warrior| +|Generate|TOK:MOR|Faerie Rogue| +|Generate|TOK:MOR|Treefolk Shaman| + +|Generate|TOK:LRW|Avatar| +|Generate|TOK:LRW|Elemental 1| +|Generate|TOK:LRW|Kithkin Soldier| +|Generate|TOK:LRW|Merfolk Wizard| +|Generate|TOK:LRW|Goblin Rogue| +|Generate|TOK:LRW|Elemental Shaman| +|Generate|TOK:LRW|Beast| +|Generate|TOK:LRW|Elemental 2| +|Generate|TOK:LRW|Elf Warrior| +|Generate|TOK:LRW|Wolf| +|Generate|TOK:LRW|Shapeshifter| + +|Generate|TOK:10E|Soldier| +|Generate|TOK:10E|Zombie| +|Generate|TOK:10E|Dragon| +|Generate|TOK:10E|Goblin| +|Generate|TOK:10E|Saproling| +|Generate|TOK:10E|Wasp| + +|Generate|TOK:CSP|Marit Lage| \ No newline at end of file diff --git a/Mage.Plugins/Mage.Card.Plugin/src/main/resources/image.url.properties b/Mage.Plugins/Mage.Card.Plugin/src/main/resources/image.url.properties index 6f4bbe654fb..f4ef4fe2d3a 100644 --- a/Mage.Plugins/Mage.Card.Plugin/src/main/resources/image.url.properties +++ b/Mage.Plugins/Mage.Card.Plugin/src/main/resources/image.url.properties @@ -56,4 +56,4 @@ leg=lg ptk=p3k ignore.urls=TOK # sets ordered by release time (newest goes first) -token.lookup.order=ROE,PVC,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS \ No newline at end of file +token.lookup.order=SOM,M11,ROE,PVC,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS \ No newline at end of file