From b103a20bd6e4d87a84b7e78a17674b66dbf44abc Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Wed, 7 Dec 2022 07:11:21 +0800 Subject: [PATCH] update ImageFetcher & CardImageRenderer - allow zoomed cards to fetch image if possible --- .../src/forge/card/CardImageRenderer.java | 24 +++++++------- .../main/java/forge/util/ImageFetcher.java | 32 +++++++++++++------ 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/forge-gui-mobile/src/forge/card/CardImageRenderer.java b/forge-gui-mobile/src/forge/card/CardImageRenderer.java index fa60d11f3f6..4a068c9ada3 100644 --- a/forge-gui-mobile/src/forge/card/CardImageRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardImageRenderer.java @@ -712,20 +712,22 @@ public class CardImageRenderer { x += pieceWidths[i]; } } + static class CachedCardImageRenderer extends CachedCardImage { + public CachedCardImageRenderer(String key) { + super(key); + } + + @Override + public void onImageFetched() { + ImageCache.clear(); + } + } public static void drawZoom(Graphics g, CardView card, GameView gameView, boolean altState, float x, float y, float w, float h, float dispW, float dispH, boolean isCurrentCard) { boolean canshow = MatchController.instance.mayView(card); - Texture image = null; - try { - image = ImageCache.getImage(card.getState(altState).getImageKey(), true); - } catch (Exception ex) { - //System.err.println(card.toString()+" : " +ex.getMessage()); - //TODO: don't know why this is needed, needs further investigation... - if (!card.hasAlternateState()) { - altState = false; - image = ImageCache.getImage(card.getState(altState).getImageKey(), true); - } - } + String key = card.getState(altState).getImageKey(); + Texture image = new CachedCardImageRenderer(key).getImage(); + FImage sleeves = MatchController.getPlayerSleeve(card.getOwner()); if (image == null) { //draw details if can't draw zoom drawDetails(g, card, gameView, altState, x, y, w, h); diff --git a/forge-gui/src/main/java/forge/util/ImageFetcher.java b/forge-gui/src/main/java/forge/util/ImageFetcher.java index a6b578d4c32..af48563a31b 100644 --- a/forge-gui/src/main/java/forge/util/ImageFetcher.java +++ b/forge-gui/src/main/java/forge/util/ImageFetcher.java @@ -148,6 +148,16 @@ public abstract class ImageFetcher { if (useArtCrop) { filename = TextUtil.fastReplace(filename, ".full", ".artcrop"); } + boolean updateLink = false; + if ("back".equals(face)) {// seems getimage relative path don't process variants for back faces. + try { + filename = TextUtil.fastReplace(filename, "1.full", imageKey.substring(imageKey.lastIndexOf('|') + 1, imageKey.indexOf('$')) + ".full"); + updateLink = true; + } catch (Exception e) { + filename = paperCard.getCardAltImageKey(); + updateLink = false; + } + } destFile = new File(ForgeConstants.CACHE_CARD_PICS_DIR, filename + ".jpg"); //skip ftp if using art crop @@ -155,8 +165,14 @@ public abstract class ImageFetcher { //move priority of ftp image here StringBuilder setDownload = new StringBuilder(ForgeConstants.URL_PIC_DOWNLOAD); if (!hasSetLookup) { - setDownload.append(ImageUtil.getDownloadUrl(paperCard, face)); - downloadUrls.add(setDownload.toString()); + if (!updateLink) { + setDownload.append(ImageUtil.getDownloadUrl(paperCard, face)); + downloadUrls.add(setDownload.toString()); + } else { + String url = ImageUtil.getDownloadUrl(paperCard, face); + setDownload.append(TextUtil.fastReplace(url, "1.full", imageKey.substring(imageKey.lastIndexOf('|') + 1, imageKey.indexOf('$')) + ".full")); + downloadUrls.add(setDownload.toString()); + } } else { List clones = StaticData.instance().getCommonCards().getAllCards(paperCard.getName()); for (PaperCard pc : clones) { @@ -234,15 +250,13 @@ public abstract class ImageFetcher { observers.add(callback); currentFetches.put(destPath, observers); - final Runnable notifyObservers = new Runnable() { - public void run() { - FThreads.assertExecutedByEdt(true); + final Runnable notifyObservers = () -> { + FThreads.assertExecutedByEdt(true); - for (Callback o : currentFetches.get(destPath)) { - o.onImageFetched(); - } - currentFetches.remove(destPath); + for (Callback o : currentFetches.get(destPath)) { + o.onImageFetched(); } + currentFetches.remove(destPath); }; try { ThreadUtil.getServicePool().submit(getDownloadTask(downloadUrls.toArray(new String[0]), destPath, notifyObservers));