From 61fa890e7edca2334dbd1abfe7693c4755095474 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sat, 30 Jul 2022 17:13:15 +0800 Subject: [PATCH 1/2] support setlookup on ImageFetcher - currently looks the files in the FTP for cards - closes #1223 --- .../main/java/forge/util/ImageFetcher.java | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/forge-gui/src/main/java/forge/util/ImageFetcher.java b/forge-gui/src/main/java/forge/util/ImageFetcher.java index da702c2c5da..ce0825c88dd 100644 --- a/forge-gui/src/main/java/forge/util/ImageFetcher.java +++ b/forge-gui/src/main/java/forge/util/ImageFetcher.java @@ -81,7 +81,8 @@ public abstract class ImageFetcher { // Skip fetching if artist info is not available for art crop if (useArtCrop && paperCard.getArtist().isEmpty()) return; - + String imagePath = ImageUtil.getImageRelativePath(paperCard, false, true, false); + final boolean hasSetLookup = ImageKeys.hasSetLookup(imagePath); final boolean backFace = imageKey.endsWith(ImageKeys.BACKFACE_POSTFIX); String filename = backFace ? paperCard.getCardAltImageKey() : paperCard.getCardImageKey(); if (useArtCrop) { @@ -93,14 +94,31 @@ public abstract class ImageFetcher { if (!useArtCrop) { //move priority of ftp image here StringBuilder setDownload = new StringBuilder(ForgeConstants.URL_PIC_DOWNLOAD); - setDownload.append(ImageUtil.getDownloadUrl(paperCard, backFace)); - downloadUrls.add(setDownload.toString()); + if (!hasSetLookup) { + setDownload.append(ImageUtil.getDownloadUrl(paperCard, backFace)); + downloadUrls.add(setDownload.toString()); + } else { + List clones = StaticData.instance().getCommonCards().getAllCards(paperCard.getName()); + for (PaperCard pc : clones) { + if (clones.size() > 1) {//clones only + if (!paperCard.getEdition().equalsIgnoreCase(pc.getEdition())) { + StringBuilder set = new StringBuilder(ForgeConstants.URL_PIC_DOWNLOAD); + set.append(ImageUtil.getDownloadUrl(pc, backFace)); + downloadUrls.add(set.toString()); + } + } else {// original from set + StringBuilder set = new StringBuilder(ForgeConstants.URL_PIC_DOWNLOAD); + set.append(ImageUtil.getDownloadUrl(pc, backFace)); + downloadUrls.add(set.toString()); + } + } + } } - + //setlookup don't support scryfall collector number final String cardCollectorNumber = paperCard.getCollectorNumber(); if (!cardCollectorNumber.equals(IPaperCard.NO_COLLECTOR_NUMBER)) { final String scryfallURL = this.getScryfallDownloadURL(paperCard, backFace, useArtCrop); - if (scryfallURL != null) + if (scryfallURL != null && !hasSetLookup) downloadUrls.add(scryfallURL); } } else if (prefix.equals(ImageKeys.TOKEN_PREFIX)) { From a60c39cfc1ccba18bd694611e79e6182531c1694 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sat, 30 Jul 2022 18:21:45 +0800 Subject: [PATCH 2/2] update setlookup for scryfall.. --- .../main/java/forge/util/ImageFetcher.java | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/forge-gui/src/main/java/forge/util/ImageFetcher.java b/forge-gui/src/main/java/forge/util/ImageFetcher.java index ce0825c88dd..e27e04557a4 100644 --- a/forge-gui/src/main/java/forge/util/ImageFetcher.java +++ b/forge-gui/src/main/java/forge/util/ImageFetcher.java @@ -39,16 +39,40 @@ public abstract class ImageFetcher { private HashMap> currentFetches = new HashMap<>(); private HashMap tokenImages; - private String getScryfallDownloadURL(PaperCard c, boolean backFace, boolean useArtCrop) { + private String getScryfallDownloadURL(PaperCard c, boolean backFace, boolean useArtCrop, boolean hasSetLookup, String imagePath, ArrayList downloadUrls) { StaticData data = StaticData.instance(); CardEdition edition = data.getEditions().get(c.getEdition()); if (edition == null) // edition does not exist - some error occurred with card data return null; - // 1. Try MCI code first, as it original. - String setCode = edition.getScryfallCode(); - String langCode = edition.getCardsLangCode(); - return ForgeConstants.URL_PIC_SCRYFALL_DOWNLOAD + - ImageUtil.getScryfallDownloadUrl(c, backFace, setCode, langCode, useArtCrop); + if (hasSetLookup) { + List clones = StaticData.instance().getCommonCards().getAllCards(c.getName()); + for (PaperCard pc : clones) { + if (clones.size() > 1) {//clones only + if (!c.getEdition().equalsIgnoreCase(pc.getEdition())) { + CardEdition ed = data.getEditions().get(pc.getEdition()); + if (ed != null) { + String setCode =ed.getScryfallCode(); + String langCode = ed.getCardsLangCode(); + downloadUrls.add(ForgeConstants.URL_PIC_SCRYFALL_DOWNLOAD + ImageUtil.getScryfallDownloadUrl(pc, backFace, setCode, langCode, useArtCrop)); + } + } + } else {// original from set + CardEdition ed = data.getEditions().get(pc.getEdition()); + if (ed != null) { + String setCode =ed.getScryfallCode(); + String langCode = ed.getCardsLangCode(); + downloadUrls.add(ForgeConstants.URL_PIC_SCRYFALL_DOWNLOAD + ImageUtil.getScryfallDownloadUrl(pc, backFace, setCode, langCode, useArtCrop)); + } + } + } + return null; + } else { + // 1. Try MCI code first, as it original. + String setCode = edition.getScryfallCode(); + String langCode = edition.getCardsLangCode(); + return ForgeConstants.URL_PIC_SCRYFALL_DOWNLOAD + + ImageUtil.getScryfallDownloadUrl(c, backFace, setCode, langCode, useArtCrop); + } } public void fetchImage(final String imageKey, final Callback callback) { @@ -114,10 +138,9 @@ public abstract class ImageFetcher { } } } - //setlookup don't support scryfall collector number final String cardCollectorNumber = paperCard.getCollectorNumber(); if (!cardCollectorNumber.equals(IPaperCard.NO_COLLECTOR_NUMBER)) { - final String scryfallURL = this.getScryfallDownloadURL(paperCard, backFace, useArtCrop); + final String scryfallURL = this.getScryfallDownloadURL(paperCard, backFace, useArtCrop, hasSetLookup, imagePath, downloadUrls); if (scryfallURL != null && !hasSetLookup) downloadUrls.add(scryfallURL); }