From 91f74ced1f0ea115aa1f9b92a84cba53af7d084e Mon Sep 17 00:00:00 2001 From: Quercitron Date: Tue, 12 Jul 2016 03:31:08 +0300 Subject: [PATCH] Add downloading of double-faced cards from the mythicspoiler.com --- .../dl/sources/MythicspoilerComSource.java | 130 ++++++++++-------- 1 file changed, 74 insertions(+), 56 deletions(-) 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 3e1753b42a5..19ceb1ee34f 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 @@ -114,66 +114,19 @@ public class MythicspoilerComSource implements CardImageSource { for (String setName : setNames.split("\\^")) { String URLSetName = URLEncoder.encode(setName, "UTF-8"); String baseUrl = "http://mythicspoiler.com/" + URLSetName + "/"; - String urlDocument; - Document doc; - if (proxyType.equals(ProxyType.NONE)) { - urlDocument = baseUrl; - doc = Jsoup.connect(urlDocument).get(); - } else { - String proxyServer = prefs.get("proxyAddress", ""); - int proxyPort = Integer.parseInt(prefs.get("proxyPort", "0")); - URL url = new URL(baseUrl); - Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyServer, proxyPort)); - HttpURLConnection uc = (HttpURLConnection) url.openConnection(proxy); - uc.connect(); + Map pageLinks = getSetLinksFromPage(cardSet, aliasesStart, prefs, proxyType, baseUrl, baseUrl); + setLinks.putAll(pageLinks); - String line; - StringBuffer tmp = new StringBuffer(); - BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream())); - while ((line = in.readLine()) != null) { - tmp.append(line); - } - doc = Jsoup.parse(String.valueOf(tmp)); + // try to download images for double-faced cards + try { + String doubleFacedUrl = baseUrl + "dfc.html"; + pageLinks = getSetLinksFromPage(cardSet, aliasesStart, prefs, proxyType, baseUrl, doubleFacedUrl); + setLinks.putAll(pageLinks); } - - Elements cardsImages = doc.select("img[src^=cards/]"); // starts with cards/ - if (!aliasesStart.isEmpty()) { - for (String text : aliasesStart) { - cardsImages.addAll(doc.select("img[src^=" + text + "]")); - } + catch (Exception ex) { + // that's ok if we cannot download double-faced cards for some sets } - if (cardsImages.isEmpty()) { - break; - } - - for (Element cardsImage : cardsImages) { - String cardLink = cardsImage.attr("src"); - String cardName = null; - if (cardLink.startsWith("cards/") && cardLink.endsWith(".jpg")) { - cardName = cardLink.substring(6, cardLink.length() - 4); - } else if (aliasesStart.contains(cardLink)) { - cardName = cardLink.substring(0, cardLink.length() - 4);; - } - if (cardName != null && !cardName.isEmpty()) { - if (cardNameAliases.containsKey(cardSet + "-" + cardName)) { - cardName = cardNameAliases.get(cardSet + "-" + cardName); - } else { - if (cardName.endsWith("1") || cardName.endsWith("2") || cardName.endsWith("3") || cardName.endsWith("4") || cardName.endsWith("5")) { - if (!cardName.startsWith("forest") - && !cardName.startsWith("swamp") - && !cardName.startsWith("mountain") - && !cardName.startsWith("island") - && !cardName.startsWith("plains")) { - - cardName = cardName.substring(0, cardName.length() - 1); - } - } - } - setLinks.put(cardName, baseUrl + cardLink); - } - } - } } catch (IOException ex) { @@ -182,6 +135,71 @@ public class MythicspoilerComSource implements CardImageSource { return setLinks; } + private Map getSetLinksFromPage(String cardSet, Set aliasesStart, Preferences prefs, + ProxyType proxyType, String baseUrl, String pageUrl) throws IOException { + Map pageLinks = new HashMap<>(); + + String urlDocument; + Document doc; + if (proxyType.equals(ProxyType.NONE)) { + urlDocument = pageUrl; + doc = Jsoup.connect(urlDocument).get(); + } else { + String proxyServer = prefs.get("proxyAddress", ""); + int proxyPort = Integer.parseInt(prefs.get("proxyPort", "0")); + URL url = new URL(pageUrl); + Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyServer, proxyPort)); + HttpURLConnection uc = (HttpURLConnection) url.openConnection(proxy); + + uc.connect(); + + String line; + StringBuffer tmp = new StringBuffer(); + BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream())); + while ((line = in.readLine()) != null) { + tmp.append(line); + } + doc = Jsoup.parse(String.valueOf(tmp)); + } + + Elements cardsImages = doc.select("img[src^=cards/]"); // starts with cards/ + if (!aliasesStart.isEmpty()) { + for (String text : aliasesStart) { + cardsImages.addAll(doc.select("img[src^=" + text + "]")); + } + } + + for (Element cardsImage : cardsImages) { + String cardLink = cardsImage.attr("src"); + String cardName = null; + if (cardLink.startsWith("cards/") && cardLink.endsWith(".jpg")) { + cardName = cardLink.substring(6, cardLink.length() - 4); + } else if (aliasesStart.contains(cardLink)) { + cardName = cardLink.substring(0, cardLink.length() - 4); + ; + } + if (cardName != null && !cardName.isEmpty()) { + if (cardNameAliases.containsKey(cardSet + "-" + cardName)) { + cardName = cardNameAliases.get(cardSet + "-" + cardName); + } else { + if (cardName.endsWith("1") || cardName.endsWith("2") || cardName.endsWith("3") || cardName.endsWith("4") || cardName.endsWith("5")) { + if (!cardName.startsWith("forest") + && !cardName.startsWith("swamp") + && !cardName.startsWith("mountain") + && !cardName.startsWith("island") + && !cardName.startsWith("plains")) { + + cardName = cardName.substring(0, cardName.length() - 1); + } + } + } + pageLinks.put(cardName, baseUrl + cardLink); + } + } + + return pageLinks; + } + @Override public String generateURL(CardDownloadData card) throws Exception { Integer collectorId = card.getCollectorId();