From 2637a29a532a9bfcee4e3e4ce78f8af806d6e229 Mon Sep 17 00:00:00 2001 From: Rafael Damasceno Date: Mon, 27 May 2019 21:35:31 +0100 Subject: [PATCH] Refactor URL fetching, exclude front face --- .../card/dl/sources/ScryfallImageSource.java | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java index 82468d5c4be..e6cdeda9fa2 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java @@ -12,13 +12,9 @@ import org.mage.plugins.card.images.CardDownloadData; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.Proxy; import java.net.URL; import java.net.URLConnection; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; -import java.net.Proxy; import java.util.*; /** @@ -83,16 +79,14 @@ public enum ScryfallImageSource implements CardImageSource { alternativeUrl = null; } - // double faced cards - // Scryfall doesn't support string collector ID's anymore (like "U123" or "176a") - // as such, we need to get the image URL's manually from their API - if (baseUrl == null && card.isTwoFacedCard()) { - try { - baseUrl = getFaceImageUrl(card, isToken, localizedCode); - alternativeUrl = getFaceImageUrl(card, isToken, defaultCode); - } catch (IOException e) { - e.printStackTrace(); - } + // double faced card + // the front face can be downloaded normally + // the back face is prepared beforehand + if(baseUrl == null && card.isTwoFacedCard() && !card.isSecondSide()) { + baseUrl = "https://api.scryfall.com/cards/" + formatSetName(card.getSet(), isToken) + "/" + + card.getCollectorIdAsInt() + "/" + localizedCode + "?format=image"; + alternativeUrl = "https://api.scryfall.com/cards/" + formatSetName(card.getSet(), isToken) + "/" + + card.getCollectorIdAsInt() + "/" + defaultCode + "?format=image"; } // basic cards by api call (redirect to img link) @@ -122,7 +116,7 @@ public enum ScryfallImageSource implements CardImageSource { JsonObject jsonCardFace = jsonCardFaces.get(card.isSecondSide() ? 1 : 0).getAsJsonObject(); JsonObject jsonImageUris = jsonCardFace.getAsJsonObject("image_uris"); - return jsonImageUris.get("png").getAsString(); + return jsonImageUris.get("large").getAsString(); } @Override @@ -137,9 +131,21 @@ public enum ScryfallImageSource implements CardImageSource { return false; } - // TODO: download faces info here - if (card.isTwoFacedCard()) { + // prepare the back face URL + if (card.isTwoFacedCard() && card.isSecondSide()) { + String defaultCode = CardLanguage.ENGLISH.getCode(); + final String localizedCode = languageAliases.getOrDefault(this.getCurrentLanguage(), defaultCode); + String url = null; + + try { + url = getFaceImageUrl(card, card.isToken(), localizedCode); + } catch (IOException e) { + logger.warn("Failed to prepare image URL for " + card.getName() + " (" + card.getSet() + ") #" + card.getCollectorId()); + downloadServiceInfo.incErrorCount(); + continue; + } + preparedUrls.put(card, url); }